4

我使用带有最新补丁的 Visual Studio 2019 创建了一个 .NET Core 3.1AnyCpu控制台应用程序。它包含的唯一代码Console.WriteLine("Hello World!")是创建它的样板。我编译了它,它在我的 Windows 10 x64 机器上运行良好。

我将Debug文件夹复制到我的 32 位 Windows 7 机器上并尝试运行控制台应用程序。我收到以下消息。(.Net Core 3.1 运行时安装在 Windows 7 机器上)。

此文件的版本与您运行的 Windows 版本不兼容。检查您计算机的系统信息以查看您是否需要 x86(32 位)或 x64(64 位)版本的程序,然后联系软件发行商。

但是,如果我使用 x86 编译控制台应用程序,那么它在 Windows 7 机器上运行良好。随着 VS2019 和 .NET Core 3/3.1 的AnyCpu变化?我本来希望编译的代码AnyCpu在 32 位和 64 位下应该可以正常工作。

4

1 回答 1

3

看起来 AnyCpu 在 .Net Core 3 中的工作方式发生了变化。在 .NET Framework 中,.exe 是托管的 exe,因此对于 AnyCpu,它在运行时将其 JIT 化为所需的 x86 或 x64 **。在使用 AnyCpu 的 .Net Core 中,.Exe 是一个普通的非托管 exe,针对 x86 / x64 编译,具体取决于您进行编译的机器的架构。但是,它创建的 dll 包含托管代码,并且可以使用 DotNet.exe 在 32 位计算机上运行。

解决方案不是在 32 位机器上编译,因为这只是在 32 位模式下启动 dll。解决方案实际上是不使用 .exe 并使用 DotNet.exe 的本地副本启动 dll。

** 来源:https ://mihai-albert.com/2020/03/08/startup-sequence-of-a-dotnet-core-app/

于 2020-07-07T22:19:39.310 回答