使用 Any CPU构建 .NET 8 应用会支持 32 位吗?
我不能在 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++ 的启动器来托管。