Open
Description
Background and motivation
The AssemblyNameInfo
type was introduced as an immutable and legacy-free counterpart of AssemblyName
that does not depend on the globalization stack, but is so far being used only as a transport type and there is no API to get the AssemblyNameInfo
of an assembly file. This would be useful for trimming-conscious metadata inspection code.
API Proposal
namespace System.Reflection.Metadata;
public struct AssemblyDefinition
{
public StringHandle Culture { get; }
public AssemblyFlags Flags { get; }
public StringHandle Name { get; }
public BlobHandle PublicKey { get; }
public Version Version { get; }
+ public AssemblyNameInfo GetAssemblyNameInfo();
}
public struct AssemblyReference
{
public StringHandle Culture { get; }
public AssemblyFlags Flags { get; }
public StringHandle Name { get; }
public BlobHandle PublicKeyOrToken { get; }
public Version Version { get; }
+ public AssemblyNameInfo GetAssemblyNameInfo();
}
public class AssemblyNameInfo
{
public static AssemblyNameInfo Parse(ReadOnlySpan<char> assemblyFile);
+ public static AssemblyNameInfo GetAssemblyNameInfo(string assemblyFile);
}
public class MetadataReader
{
public AssemblyDefinition GetAssemblyDefinition();
+ public static AssemblyNameInfo GetAssemblyNameInfo(string assemblyFile);
}
API Usage
using PEReader peReader = new(File.OpenRead("MyLib.dll"));
if (peReader.HasMetadata)
{
var info = peReader.GetAssemblyNameInfo();
Console.WriteLine(info.FullName);
}
Alternative Designs
MetadataReader.GetAssemblyNameInfo
could be omitted. I added it for symmetry withMetadataReader.GetAssemblyName
but that had a good reason to exist that is not applicable here.AssemblyNameInfo.GetAssemblyNameInfo
could be ommited, as we already exposeAssemblyNameInfo.Parse(System.ReadOnlySpan<char> assemblyName)
(andTryParse
, so we can handle any input and throw or just return false for invalid inputs)
Risks
No response