From 8eead110065103b9f500fc68a064c24ab017f635 Mon Sep 17 00:00:00 2001
From: "MSDN.WhiteKnight" <35516665+MSDN-WhiteKnight@users.noreply.github.com>
Date: Wed, 2 Feb 2022 10:51:54 +0500
Subject: [PATCH 1/4] Create MethodSignatureSnippets.cs
---
.../MethodSignatureSnippets.cs | 109 ++++++++++++++++++
1 file changed, 109 insertions(+)
create mode 100644 snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs
diff --git a/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs
new file mode 100644
index 00000000000..1180a2503f6
--- /dev/null
+++ b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Reflection.Metadata;
+using System.Reflection.Metadata.Ecma335;
+using System.Reflection;
+
+namespace MethodSignatureSnippets
+{
+ static class MethodSignatureSnippets
+ {
+ //
+ static BlobBuilder EncodeMethodSignatureParameterless()
+ {
+ // void Method()
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(0, returnType => returnType.Void(), parameters => { });
+
+ return methodSignature;
+ }
+
+ static BlobBuilder EncodeMethodSignaturePrimitiveTypes()
+ {
+ // double Method(double x, double y)
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(2, returnType => returnType.Type().Double(),
+ parameters => {
+ parameters.AddParameter().Type().Double();
+ parameters.AddParameter().Type().Double();
+ });
+
+ return methodSignature;
+ }
+
+ static BlobBuilder EncodeMethodSignatureClassType(MetadataBuilder metadataBuilder)
+ {
+ // void Method(System.Threading.Thread x)
+ var methodSignature = new BlobBuilder();
+
+ AssemblyReferenceHandle mscorlibAssemblyRef = metadataBuilder.AddAssemblyReference(
+ name: metadataBuilder.GetOrAddString("System.Threading.Thread"),
+ version: new Version(4, 0, 0, 0),
+ culture: default(StringHandle),
+ publicKeyOrToken: default(BlobHandle),
+ flags: default(AssemblyFlags),
+ hashValue: default(BlobHandle));
+
+ TypeReferenceHandle typeRef = metadataBuilder.AddTypeReference(
+ mscorlibAssemblyRef,
+ metadataBuilder.GetOrAddString("System.Threading"),
+ metadataBuilder.GetOrAddString("Thread"));
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(1, returnType => returnType.Void(),
+ parameters => {
+ parameters.AddParameter().Type().Type(typeRef, false);
+ });
+
+ return methodSignature;
+ }
+
+ static BlobBuilder EncodeMethodSignatureModifiedTypes()
+ {
+ // void Method(ref int x, int[] y)
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(2, returnType => returnType.Void(),
+ parameters => {
+ parameters.AddParameter().Type(isByRef: true).Int32();
+ parameters.AddParameter().Type().SZArray().Int32();
+ });
+
+ return methodSignature;
+ }
+
+ public static BlobBuilder EncodeMethodSignatureGeneric()
+ {
+ // void Method(T x)
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature(genericParameterCount: 1).
+ Parameters(1, returnType => returnType.Void(),
+ parameters => {
+ parameters.AddParameter().Type().GenericMethodTypeParameter(0);
+ });
+
+ return methodSignature;
+ }
+ //
+
+ public static void Run()
+ {
+ var metadataBuilder = new MetadataBuilder();
+ EncodeMethodSignatureParameterless();
+ EncodeMethodSignaturePrimitiveTypes();
+ EncodeMethodSignatureClassType(metadataBuilder);
+ EncodeMethodSignatureModifiedTypes();
+ EncodeMethodSignatureGeneric();
+ }
+ }
+}
From 5a1ae0d893c8d2ab1b44c87e525ce0f08b5fdc35 Mon Sep 17 00:00:00 2001
From: "MSDN.WhiteKnight" <35516665+MSDN-WhiteKnight@users.noreply.github.com>
Date: Wed, 2 Feb 2022 10:52:31 +0500
Subject: [PATCH 2/4] Add project
---
.../MethodSignature/MethodSignatureSnippets.csproj | 8 ++++++++
.../BlobEncoder/MethodSignature/Program.cs | 12 ++++++++++++
2 files changed, 20 insertions(+)
create mode 100644 snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj
create mode 100644 snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs
diff --git a/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj
new file mode 100644
index 00000000000..ddb344e65f4
--- /dev/null
+++ b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj
@@ -0,0 +1,8 @@
+
+
+
+ Exe
+ net6.0
+
+
+
diff --git a/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs
new file mode 100644
index 00000000000..be2bfe8bfc9
--- /dev/null
+++ b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace MethodSignatureSnippets
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ MethodSignatureSnippets.Run();
+ }
+ }
+}
From 8638262d6352731ddf52f0fc9eaa54105e47efb0 Mon Sep 17 00:00:00 2001
From: "MSDN.WhiteKnight" <35516665+MSDN-WhiteKnight@users.noreply.github.com>
Date: Wed, 2 Feb 2022 10:57:27 +0500
Subject: [PATCH 3/4] Update BlobEncoder.xml
---
.../BlobEncoder.xml | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml b/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
index 37959e0f32a..64ab1dc0e46 100644
--- a/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
+++ b/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
@@ -244,7 +244,20 @@
to encode an instance method signature, to encode a static method signature.
Encodes method signature blob.
An encoder of the rest of the signature including return value and parameters.
- To be added.
+
+ class remarks.
+
+## Examples
+This example shows how to encode different method signatures:
+
+:::code language="csharp" source="~/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs" id="SnippetEncodeSignatures":::
+
+ ]]>
+
is not in range [0, 0xffff].
From 5f5b40c953180160eb780ce34d7916bae30071ba Mon Sep 17 00:00:00 2001
From: "MSDN.WhiteKnight" <35516665+MSDN-WhiteKnight@users.noreply.github.com>
Date: Thu, 3 Feb 2022 07:58:12 +0500
Subject: [PATCH 4/4] Update
xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com>
---
xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml b/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
index 64ab1dc0e46..04f005dc31e 100644
--- a/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
+++ b/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
@@ -249,7 +249,7 @@
## Remarks
-Method signature blobs are used when defining or referencing methods in .NET metadata. For a complete example of emitting a method definition see the class remarks.
+Method signature blobs are used when defining or referencing methods in .NET metadata. For a complete example of emitting a method definition, see the class remarks.
## Examples
This example shows how to encode different method signatures: