diff --git a/src/csharp/Grpc.Tools/Common.cs b/src/csharp/Grpc.Tools/Common.cs
index d635980495318584f91b3bf0c0bf102e3d166d3b..13cd6a323167dff9b0b07a4a4a0a85c02ddc206f 100644
--- a/src/csharp/Grpc.Tools/Common.cs
+++ b/src/csharp/Grpc.Tools/Common.cs
@@ -60,7 +60,7 @@ namespace Grpc.Tools
                : RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? OsKind.MacOsX
                : OsKind.Unknown;
 
-            switch (RuntimeInformation.OSArchitecture)
+            switch (RuntimeInformation.ProcessArchitecture)
             {
                 case Architecture.X86: Cpu = CpuKind.X86; break;
                 case Architecture.X64: Cpu = CpuKind.X64; break;
@@ -86,17 +86,7 @@ namespace Grpc.Tools
             }
 
             // Hope we are not building on ARM under Xamarin!
-            Cpu = Environment.Is64BitOperatingSystem ? CpuKind.X64 : CpuKind.X86;
-
-            // See https://github.com/grpc/grpc/issues/18543
-            // Problem: Is64BitOperatingSystem returns "true" inside a 32-bit docker container.
-            // Workaround: Mono is 64-bit by default on linux, so we get around
-            // this by assuming 32-bit mono linux process means
-            // we should invoke 32-bit version of protoc.
-            if (Os == OsKind.Linux && !Environment.Is64BitProcess)
-            {
-                Cpu = CpuKind.X86;
-            }
+            Cpu = Environment.Is64BitProcess ? CpuKind.X64 : CpuKind.X86;
 #endif
         }
     };