Reverting: Set AssemblyName.ProcessorArchitecture for compatibility (#80581) (#84028)
authorVladimir Sadov <vsadov@microsoft.com>
Sat, 1 Apr 2023 01:48:29 +0000 (18:48 -0700)
committerGitHub <noreply@github.com>
Sat, 1 Apr 2023 01:48:29 +0000 (18:48 -0700)
* Reverting #80581

* Adjust the test.

* keep new version of CalculateProcArch  (do not revert)

src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/MetadataReader.netstandard.cs
src/libraries/System.Reflection.Metadata/tests/Metadata/MetadataReaderTests.cs

index f33c0455ee2dbce606536e1bf364454e8e88ed75..a11a8fcacda4e5a0e6a5852c13f6db479093dbdb 100644 (file)
@@ -85,12 +85,6 @@ namespace System.Reflection.Metadata
                     peReader = new PEReader((byte*)safeBuffer.DangerousGetHandle(), (int)safeBuffer.ByteLength);
                     MetadataReader mdReader = peReader.GetMetadataReader(MetadataReaderOptions.None);
                     AssemblyName assemblyName = mdReader.GetAssemblyDefinition().GetAssemblyName();
-
-                    AssemblyFlags aFlags = mdReader.AssemblyTable.GetFlags();
-#pragma warning disable SYSLIB0037 // AssemblyName.ProcessorArchitecture is obsolete
-                    assemblyName.ProcessorArchitecture = CalculateProcArch(peReader, aFlags);
-#pragma warning restore SYSLIB0037
-
                     return assemblyName;
                 }
                 finally
@@ -107,42 +101,6 @@ namespace System.Reflection.Metadata
             }
         }
 
-        private static ProcessorArchitecture CalculateProcArch(PEReader peReader, AssemblyFlags aFlags)
-        {
-            // 0x70 specifies "reference assembly".
-            // For these, CLR wants to return None as arch so they can be always loaded, regardless of process type.
-            if (((uint)aFlags & 0xF0) == 0x70)
-                return ProcessorArchitecture.None;
-
-            PEHeaders peHeaders = peReader.PEHeaders;
-            switch (peHeaders.CoffHeader.Machine)
-            {
-                case Machine.IA64:
-                    return ProcessorArchitecture.IA64;
-                case Machine.Arm:
-                    return ProcessorArchitecture.Arm;
-                case Machine.Amd64:
-                    return ProcessorArchitecture.Amd64;
-                case Machine.I386:
-                    {
-                        CorFlags flags = peHeaders.CorHeader!.Flags;
-                        if ((flags & CorFlags.ILOnly) != 0 &&
-                            (flags & CorFlags.Requires32Bit) == 0)
-                        {
-                            // platform neutral.
-                            return ProcessorArchitecture.MSIL;
-                        }
-
-                        // requires x86
-                        return ProcessorArchitecture.X86;
-                    }
-            }
-
-            // ProcessorArchitecture is a legacy API and does not cover other Machine kinds.
-            // For example ARM64 is not expressible
-            return ProcessorArchitecture.None;
-        }
-
         private static AssemblyNameFlags GetAssemblyNameFlags(AssemblyFlags flags)
         {
             AssemblyNameFlags assemblyNameFlags = AssemblyNameFlags.None;
index 3b946e5a807795268e83ff13504778a8cf9106ad..56943320ce5a4eff369019fa3942c020fb66b97d 100644 (file)
@@ -3095,7 +3095,7 @@ namespace System.Reflection.Metadata.Tests
                 Assert.Equal(new AssemblyName(a.FullName).ToString(), name.ToString());
 
 #pragma warning disable SYSLIB0037 // AssemblyName.ProcessorArchitecture is obsolete
-                Assert.Equal(ProcessorArchitecture.MSIL, name.ProcessorArchitecture);
+                Assert.Equal(ProcessorArchitecture.None, name.ProcessorArchitecture);
 #pragma warning restore SYSLIB0037
             }
         }