diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs index 2b42338de2f238..8fe1d3baf77034 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs @@ -356,7 +356,7 @@ internal static unsafe RuntimeAssembly InternalLoad(AssemblyName assemblyName, byte[]? publicKeyOrToken; if ((publicKeyOrToken = assemblyName.RawPublicKeyToken) != null) { - flags |= ~AssemblyNameFlags.PublicKey; + flags &= ~AssemblyNameFlags.PublicKey; } else if ((publicKeyOrToken = assemblyName.RawPublicKey) != null) { diff --git a/src/libraries/System.Reflection/tests/AssemblyTests.cs b/src/libraries/System.Reflection/tests/AssemblyTests.cs index 3dcd9623ce3df5..bd86b761db560f 100644 --- a/src/libraries/System.Reflection/tests/AssemblyTests.cs +++ b/src/libraries/System.Reflection/tests/AssemblyTests.cs @@ -696,6 +696,28 @@ public void GetSatelliteAssemblyNeg() Assert.Throws(() => (typeof(AssemblyTests).Assembly.GetSatelliteAssembly(CultureInfo.InvariantCulture))); } + [Fact] + public void AssemblyLoadWithPublicKey() + { + AssemblyName an = new AssemblyName("System.Runtime"); + + Assembly a = Assembly.Load(an); + + byte[] publicKey = a.GetName().GetPublicKey(); + Assert.True(publicKey.Length > 0); + an.SetPublicKey(publicKey); + + Assembly a1 = Assembly.Load(an); + Assert.Equal(a, a1); + + // Force the public key token to be created + Assert.True(an.GetPublicKeyToken().Length > 0); + + // Verify that we can still load the assembly + Assembly a2 = Assembly.Load(an); + Assert.Equal(a, a2); + } + [Fact] public void AssemblyLoadFromString() {