Skip to content

Commit d498f66

Browse files
MetadataReader: add remarks and example (#4140)
* MetadataReader: add remarks and example * Bump .NET Core version to support C# 8.0 Co-authored-by: Andy De George <[email protected]>
1 parent 87b8036 commit d498f66

File tree

4 files changed

+71
-1
lines changed

4 files changed

+71
-1
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.IO;
3+
using System.Collections.Generic;
4+
using System.Reflection.Metadata;
5+
using System.Reflection.PortableExecutable;
6+
7+
namespace MetadataReaderSnippets
8+
{
9+
class MetadataReaderSnippets
10+
{
11+
public static void Run()
12+
{
13+
//<SnippetMetadataReader>
14+
using var fs = new FileStream("Example.dll", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
15+
using var peReader = new PEReader(fs);
16+
17+
MetadataReader mr = peReader.GetMetadataReader();
18+
19+
foreach (TypeDefinitionHandle tdefh in mr.TypeDefinitions)
20+
{
21+
TypeDefinition tdef = mr.GetTypeDefinition(tdefh);
22+
23+
string ns = mr.GetString(tdef.Namespace);
24+
string name = mr.GetString(tdef.Name);
25+
Console.WriteLine($"{ns}.{name}");
26+
}
27+
//</SnippetMetadataReader>
28+
}
29+
}
30+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="System.Reflection.Metadata" Version="1.8.0" />
10+
</ItemGroup>
11+
12+
</Project>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace MetadataReaderSnippets
4+
{
5+
class Program
6+
{
7+
static void Main()
8+
{
9+
MetadataReaderSnippets.Run();
10+
}
11+
}
12+
}

xml/System.Reflection.Metadata/MetadataReader.xml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,23 @@
2222
<Interfaces />
2323
<Docs>
2424
<summary>Reads metadata as defined by the ECMA 335 CLI specification.</summary>
25-
<remarks>To be added.</remarks>
25+
<remarks>
26+
<format type="text/markdown"><![CDATA[
27+
28+
## Remarks
29+
<xref:System.Reflection.Metadata.MetadataReader> reads the contents of tables and heaps from the specified CLI metadata. It operates low-level constructs such as type and method definitions. For a higher level API to inspect the contents of assemblies using reflection constructs, see <xref:System.Reflection.MetadataLoadContext>.
30+
31+
You can use constructors, such as <xref:System.Reflection.Metadata.MetadataReader.%23ctor(System.Byte%2A,System.Int32)>, to create an instance of <xref:System.Reflection.Metadata.MetadataReader> for a given memory location. To read metadata from the Portable Executable assembly file, create <xref:System.Reflection.PortableExecutable.PEReader> and use the <xref:System.Reflection.Metadata.PEReaderExtensions.GetMetadataReader(System.Reflection.PortableExecutable.PEReader)> extension method.
32+
33+
The format of CLI metadata is defined by the ECMA-335 specification. For more information, see [Standard ECMA-335 - Common Language Infrastructure (CLI)](http://www.ecma-international.org/publications/standards/Ecma-335.htm) on the Ecma International Web site.
34+
35+
## Examples
36+
This example shows how to create <xref:System.Reflection.Metadata.MetadataReader> for an assembly and read all type definitions from it:
37+
38+
[!code-csharp[](~/samples/snippets/csharp/api/system.reflection.metadata/metadatareader/MetadataReaderSnippets.cs#MetadataReader)]
39+
40+
]]></format>
41+
</remarks>
2642
</Docs>
2743
<Members>
2844
<Member MemberName=".ctor">

0 commit comments

Comments
 (0)