.NET Core 3.1 Console App 将无法在 Windows 7 上运行



我使用带有最新补丁的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.1AnyCpu改变吗?我本来以为为AnyCpu编译的代码在 32 位和 64 位下应该可以正常工作。

看起来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/

最新更新