Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Wrighton <davidwr@microsoft.com>2016-04-07 02:26:29 +0300
committerDavid Wrighton <davidwr@microsoft.com>2016-04-07 02:26:29 +0300
commit03a67169bdde13281074ca8784d99b7490f27509 (patch)
treebeaaca32e2d6d9683dfb08dfb76916907615c2fc /src/ILCompiler.MetadataTransform
parent4cbecd24c4c01ea6ef0804e42a84ab99f4863f42 (diff)
Always use PublicKeyToken in metadata transform instead of PublicKey
While a PublicKey is a valid representation in a reference, its rarely/never desireable. PublicKeyTokens are all that are expected to be present during assembly resolution, and thus resolution algorithms ignore the extra data encoded in a PublicKey as opposed to a PublicKeyToken, and actually must perform conversion to a PublicKeyToken to function which can be costly.
Diffstat (limited to 'src/ILCompiler.MetadataTransform')
-rw-r--r--src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Scope.cs9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Scope.cs b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Scope.cs
index c311f6494..cc30f2a19 100644
--- a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Scope.cs
+++ b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Scope.cs
@@ -103,17 +103,16 @@ namespace ILCompiler.Metadata
Debug.Assert((int)AssemblyFlags.PublicKey == (int)AssemblyNameFlags.PublicKey);
Debug.Assert((int)AssemblyFlags.Retargetable == (int)AssemblyNameFlags.Retargetable);
- scopeReference.Flags = (AssemblyFlags)assemblyName.Flags;
+
+ // References use a public key token instead of full public key.
+ scopeReference.Flags = (AssemblyFlags)(assemblyName.Flags & ~AssemblyNameFlags.PublicKey);
if (assemblyName.ContentType == AssemblyContentType.WindowsRuntime)
{
scopeReference.Flags |= (AssemblyFlags)((int)AssemblyContentType.WindowsRuntime << 9);
}
- if ((assemblyName.Flags & AssemblyNameFlags.PublicKey) != 0)
- scopeReference.PublicKeyOrToken = assemblyName.GetPublicKey();
- else
- scopeReference.PublicKeyOrToken = assemblyName.GetPublicKeyToken();
+ scopeReference.PublicKeyOrToken = assemblyName.GetPublicKeyToken();
}
else
{