diff options
author | David Wrighton <davidwr@microsoft.com> | 2016-04-07 02:26:29 +0300 |
---|---|---|
committer | David Wrighton <davidwr@microsoft.com> | 2016-04-07 02:26:29 +0300 |
commit | 03a67169bdde13281074ca8784d99b7490f27509 (patch) | |
tree | beaaca32e2d6d9683dfb08dfb76916907615c2fc /src | |
parent | 4cbecd24c4c01ea6ef0804e42a84ab99f4863f42 (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')
-rw-r--r-- | src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Scope.cs | 9 |
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 { |