Browse Source

Optimize GetFullAssemblyName extension method

pull/2643/head
Siegfried Pammer 3 years ago
parent
commit
6219bb964c
  1. 54
      ICSharpCode.Decompiler/Metadata/MetadataExtensions.cs

54
ICSharpCode.Decompiler/Metadata/MetadataExtensions.cs

@ -94,25 +94,39 @@ namespace ICSharpCode.Decompiler.Metadata @@ -94,25 +94,39 @@ namespace ICSharpCode.Decompiler.Metadata
public static string GetFullAssemblyName(this SRM.AssemblyReference reference, MetadataReader reader)
{
string publicKey = "null";
if (!reference.PublicKeyOrToken.IsNil)
StringBuilder builder = new StringBuilder();
builder.Append(reader.GetString(reference.Name));
builder.Append(", Version=");
builder.Append(reference.Version);
builder.Append(", Culture=");
if (reference.Culture.IsNil)
{
if ((reference.Flags & AssemblyFlags.PublicKey) != 0)
{
publicKey = CalculatePublicKeyToken(reference.PublicKeyOrToken, reader);
}
else
{
publicKey = reader.GetBlobBytes(reference.PublicKeyOrToken).ToHexString(8);
}
builder.Append("neutral");
}
else
{
builder.Append(reader.GetString(reference.Culture));
}
if (reference.PublicKeyOrToken.IsNil)
{
builder.Append(", PublicKeyToken=null");
}
else if ((reference.Flags & AssemblyFlags.PublicKey) != 0)
{
builder.Append(", PublicKeyToken=");
builder.Append(CalculatePublicKeyToken(reference.PublicKeyOrToken, reader));
}
else
{
builder.Append(", PublicKeyToken=");
builder.AppendHexString(reader.GetBlobReader(reference.PublicKeyOrToken));
}
string properties = "";
if ((reference.Flags & AssemblyFlags.Retargetable) != 0)
properties = ", Retargetable=true";
return $"{reader.GetString(reference.Name)}, " +
$"Version={reference.Version}, " +
$"Culture={(reference.Culture.IsNil ? "neutral" : reader.GetString(reference.Culture))}, " +
$"PublicKeyToken={publicKey}{properties}";
{
builder.Append(", Retargetable=true");
}
return builder.ToString();
}
public static bool TryGetFullAssemblyName(this SRM.AssemblyReference reference, MetadataReader reader, out string assemblyName)
@ -140,6 +154,14 @@ namespace ICSharpCode.Decompiler.Metadata @@ -140,6 +154,14 @@ namespace ICSharpCode.Decompiler.Metadata
return sb.ToString();
}
public static void AppendHexString(this StringBuilder builder, BlobReader reader)
{
for (int i = 0; i < reader.Length; i++)
{
builder.AppendFormat("{0:x2}", reader.ReadByte());
}
}
public static string ToHexString(this BlobReader reader)
{
StringBuilder sb = new StringBuilder(reader.Length * 3);

Loading…
Cancel
Save