有可能在XP上运行.NET 4.5应用程序吗

本文关键字:应用程序 NET 运行 XP 有可能 | 更新日期: 2023-09-27 18:21:10

首先,我已经阅读了以下内容:

  • Connect案例
  • VS案例
  • 尤其是这个频道的帖子

因此,从最后一点来看,我真的认为这是没有办法的,但我必须看看我是否能得到一个明确的答案,因为我的团队希望从.NET 4.0升级到.NET 4.5。但是,我们必须支持XP。

如果我们想支持XP,是否不可能使用.NET 4.5

我唯一能想到的就是创建两个独立的解决方案,但如果我们使用.NET4.5功能,代码库就必须分开。

所以,我正在寻找一些我找不到的、其他人可能已经知道的惊人的解决方法。

有可能在XP上运行.NET 4.5应用程序吗

我不太愿意公布这个答案,它实际上在技术上是可行的,但在实践中效果不太好。CLR和核心框架程序集的版本号在4.5中没有更改。您的目标仍然是CLR的4.0.30319版本,框架程序集的版本号仍然是4.0.0.0。当你用ildasm.exe这样的反汇编程序查看程序集清单时,它唯一与众不同的地方是存在[TargetFramework]属性,该属性表示需要4.5,必须进行更改。实际上并没有那么容易,它是由编译器发出的。

最大的区别不是显而易见的,微软对程序集的可执行文件头进行了早该进行的更改。指定可执行文件兼容的Windows版本。XP属于从Windows 2000开始的上一代Windows。它们的主要版本号是5。Vista是当前一代的开始,主要版本号为6。

.NET编译器始终指定最低版本号为4.00,即Windows NT和Windows 9x的版本。您可以通过在程序集上运行dumpbin.exe/headers来看到这一点。示例输出如下:

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            ...
            4.00 operating system version
            0.00 image version
            4.00 subsystem version              // <=== here!!
               0 Win32 version
            ...

.NET 4.5的新增功能是编译器将该子系统版本更改为6.00。这一变化在很大程度上是因为Windows关注这个数字,而不仅仅是检查它是否足够小。它还启用了appcompat功能,因为它假设该程序是为在旧版本的Windows上运行而编写的。这些功能会带来麻烦,尤其是Windows在Aero中谎报窗口大小的方式很麻烦。当它看到该程序是为在具有Aero的Windows版本上运行而设计的时,它就不再对Aero窗口的胖边界撒谎了。

您可以更改该版本号,并通过在程序集上使用/subsystem选项运行Editbin.exe将其设置回4.00。此答案显示一个示例后生成事件。

然而,好消息到此为止,一个重要的问题是.NET 4.5与.NET 4.0不太兼容。到目前为止,最大的问题是类从一个程序集移动到另一个程序集中。最值得注意的是,[Extension]属性发生了这种情况。以前在System.Core.dll中,它被移到了.NET 4.5中的Mscorlib.dll中。这在XP上是一个笑话。如果你声明了自己的扩展方法,你的程序会说在Mscorlib中查找该属性,该属性是由.NET 4.5版本的System.Core引用程序集中的[TypeForwardedTo]属性启用的。但当你在.NET 4.0 上运行程序时,它就不存在了

当然,没有什么可以帮助您停止使用仅在.NET4.5上可用的类和方法。当你这样做时,你的程序将失败,在4.0 上运行时会出现TypeLoadException或MissingMethodException

只要目标是4.0,所有这些问题都会消失。或者打破僵局,停止支持XP,这是一个程序员通常无法做出的商业决策,但肯定可以通过指出它造成的麻烦来鼓励它。当然,必须支持古老的操作系统是非零成本的,只是测试工作是巨大的。管理层通常不会意识到这一成本,除非向他们指出,否则Windows兼容性是传奇。将成本转交给客户,他们往往会更快地做出正确的决定:)但我们无法帮助您。

遗憾的是,不,您不能在XP上运行4.5程序。

以及Connect页面上的相关帖子:

由Microsoft于2012年3月23日上午10:39发布
谢谢你的报告。此行为是在.NET Framework 4.5 Beta中设计的。支持的最低操作系统为Windows 7、Windows Server 2008 SP2和Windows Server 2008 R2 SP1。Windows XP不是Beta版支持的操作系统。

Mono项目放弃了对Windows XP的支持,"忘记"了。尽管他们仍然声称Windows XP SP2是最低支持版本,但它实际上是Windows Vista。

支持WindowsXP的Mono的最后一个版本是3.2.3。

尝试单声道:

http://www.go-mono.com/mono-downloads/download.html

此下载适用于Windows XP、2003、Vista和Windows 7的所有版本。

支持windows XP(SP3)的最后一个版本是mono--4.3.2.467-gtksharp-2.30.1-win32-.msi,它不能取代.NET 4.5,但可能对某些应用程序感兴趣。

请参阅:https://download.mono-project.com/archive/4.3.2/windows-installer/

是的,您可能需要安装一个核心api:github.com/Skulltrail192/one-core-api-Binaries您可以安装.NET最高达4.8