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

时间:2013-07-06 03:19:06

标签: c# .net .net-4.0 compatibility .net-4.5

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

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

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

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

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

5 个答案:

答案 0 :(得分:183)

我对发布这个答案犹豫不决,实际上它在技术上是可行的,但在实践中它并不能很好地发挥作用。 4.5中没有更改CLR和核心框架程序集的版本号。您仍然以CLR的v4.0.30319为目标,框架程序集版本号仍为4.0.0.0。当您使用像ildasm.exe这样的反汇编程序查看程序集时,唯一与该程序集不同的是,[TargetFramework]属性的存在表明需要4.5,这是必须更改的。实际上并不那么容易,它是由编译器发出的。

最大的不同之处并非如此,微软在程序集的可执行文件头中做了一个早该进行的更改。其中指定了可执行文件兼容的Windows版本。 XP属于上一代Windows,从Windows 2000开始。它们的主要版本号为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。 This answer显示了一个示例后期事件。

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

当然,没有任何东西可以帮助您停止使用仅在.NET 4.5上提供的类和方法。执行此操作时,在4.0上运行时,程序将失败并出现TypeLoadException或MissingMethodException

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

答案 1 :(得分:21)

Sadly, no, you can't run 4.5 programs on XP.

来自Connect页面的相关帖子:

  

Microsoft于23/03/2012 10:39发表   谢谢你的报道。此行为是在.NET Framework 4.5 Beta中设计的。支持的最低操作系统是Windows 7,Windows Server 2008 SP2和Windows Server 2008 R2 SP1。 Windows XP不是Beta版本支持的操作系统。

答案 2 :(得分:7)

尝试单声道:

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

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

答案 3 :(得分:7)

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

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

答案 4 :(得分:4)

支持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/