是否可以在XP上运行.NET 4.5应用程序?

p4tfgftt  于 2023-08-08  发布在  .NET
关注(0)|答案(6)|浏览(160)

首先,我读到以下几点:

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

如果我们想支持XP,是否没有可能转到.NET 4.5?

我唯一能想到的是创建两个独立的解决方案,但是如果我们使用.NET 4.5特性,代码库将不得不分开。
所以,我正在寻找一些惊人的变通办法,我找不到,其他人可能已经知道。

63lcw9qa

63lcw9qa1#

我不太愿意发表这个答案,这实际上在技术上是可行的,但在实践中并不那么有效。CLR和核心框架程序集的版本号在4.5中没有更改。您的目标仍然是CLR的v4.0.30319,框架程序集版本号仍然是4.0.0.0。当您使用类似ildasm.exe的反汇编程序查看程序集清单时,唯一与众不同的地方是存在一个[TargetFramework]属性,该属性表明需要4.5,这将不得不被更改。实际上并不那么容易,它是由编译器发出的。
最大的区别是不明显,Microsoft在程序集的可执行文件头中做了一个迟来的更改。它指定可执行文件与Windows的哪个版本兼容。XP属于上一代Windows,始于Windows 2000。主要版本号为5。Vista是当前一代的开始,主要版本号为6。
.NET编译器始终将最小版本号指定为4.00,即Windows NT和Windows 9 x的版本。您可以通过在程序集上运行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。This answer显示了一个示例postbuild事件。
然而,好消息到此为止,一个重要的问题是.NET 4.5与.NET 4.0不是很兼容。到目前为止,最大的障碍是类从一个集合转移到另一个集合。最值得注意的是,这是在[扩展]属性上发生的。以前在System.Core.dll中,它在.NET 4.5中被移动到Mscorlib.dll。如果你声明了自己的扩展方法,你的程序说要在Mscorlib中查找属性,在System.Core引用程序集的.NET 4.5版本中的[TypeForwardedTo]属性启用。但是当你在.NET 4.0上运行你的程序时,它就不存在了
当然,没有什么可以帮助您停止使用仅在.NET 4.5上可用的类和方法。当您这样做时,程序在4.0上运行时将失败,并出现TypeLoadException或MissingMethodException
只要目标4.0,所有这些问题都消失了。或者打破僵局,停止支持XP,这是程序员不能经常做出的商业决策,但通过指出它所造成的麻烦,肯定可以鼓励他们。当然,必须支持古老的操作系统的成本不是零,只是测试工作是巨大的。管理层通常不认识到的成本,Windows兼容性是传奇,除非有人向他们指出。将成本转发给客户,他们往往会更快地做出正确的决定:)但我们无法帮助您。

xjreopfe

xjreopfe2#

Sadly, no, you can't run 4.5 programs on XP.
以及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版支持的操作系统。

csga3l58

csga3l583#

Mono项目放弃了对Windows XP的支持,并且“忘记”提及它。虽然他们仍然声称Windows XP SP2是最低支持版本,但它实际上是Windows Vista。
支持Windows XP的Mono最新版本是3.2.3。

qyswt5oh

qyswt5oh4#

试试mono:
http://www.go-mono.com/mono-downloads/download.html
此下载适用于所有版本的Windows XP、2003、Vista和Windows 7。

ep6jt1vc

ep6jt1vc5#

支持Windows XP(SP3)的最后一个版本是mono-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi,它并没有取代.NET 4.5,但可能对某些应用程序感兴趣。
标签:https://download.mono-project.com/archive/4.3.2/windows-installer/

ozxc1zmp

ozxc1zmp6#

是的,您可能需要安装一个核心API:github.com/Skulltrail192/One-Core-API-Binaries,您可以安装.NET 4.8

相关问题