冠军

导航

使用 Any CPU构建 .NET 8 应用会支持 32 位吗?

https://learn.microsoft.com/en-us/answers/questions/2261688/will-net8-support-32-bit-application-when-built-on

我不能在 32 位的操作系统上运行使用 Any CPU 构建的 .NET 8 应用,但是,如果我显式指定使用 x86 架构进行构建则没有问题。

那么,当使用 Any CPU 构建的 .NET8 应用,还支持 32 位应用吗?

回答

在 .NET8 中,使用 Any CPU 构建确实与在 .NET Framework 中不同

当使用 VS 2022 构建 .NET8 应用的时候,它实际上创建了一个 dll,此 dll 将被框架提供的启动程序所加载。当使用 Any CPU 的时候,默认将使用 64 位的启动程序来加载。因此,导致了这个 .NET8 应用不能在 32 位操作系统上执行。

有一种方式可以让 VS 2022 为 Any CPU 的 .NET8 应用使用 32 位的启动程序,通过NETCore Sdk 的 MSBuild 属性 RuntimeIdentifier 来实现。与 .NET Framework 下的行为不同,它的行为是 Any CPU 的应用将以 32 位的进程运行在 64 位操作系统上。

<PropertyGroup>
  <RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>

如果你支持 32 位版本的 Windows,我看不到使用 Any CPU 的好处,因为 .NET 8 的启动程序不是平台无关的。

说明

在 .NET 中对所有的 dll 使用了 Any CPU, 所以,如果你使用 dotnet 来执行 dll 程序,它会在所有支持的系统上工作。

但如果你 build 它,那么将使用一个 C/C++ 的二进制程序来托管该 dll,而默认使用的是 64 位的启动器。

注意,与 .NET Framework 不同,它使用操作系统的代码来托管 .NET 的 dll, 而对于不希望使用 dotnet.exe 来托管的场景,将会使用一个 C/C++ 的启动器来托管。

参考资料

posted on 2025-06-24 10:21  冠军  阅读(27)  评论(0)    收藏  举报