我使用带有最新补丁的Visual Studio 2019创建了.NET Core 3.1 AnyCpu
控制台应用程序。它包含的唯一代码是创建时所用的样板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位下可以正常工作。
答案 0 :(得分:2)
AnyCpu在.Net Core 3中的工作方式似乎发生了变化。在该框架中,.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/