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

首先,我读了以下内容:

  • 连接案例
  • VS情况
  • 特别是这个channel9的post

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

如果我们想支持XP,是不是有可能去.NET 4.5?

我唯一能想到的就是创build两个独立的解决scheme,但是如果我们使用.NET 4.5特性,那么代码库就不得不分离。

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

我毫不犹豫地发表这个答案,这实际上在技术上是可行的,但在实践中并不能很好地工作。 在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中的新增function是编译器将子系统版本更改为6.00。 这个变化在很大程度上是因为Windows注意到这个数字,而不仅仅是检查它是否足够小。 它还会启用appcompatfunction,因为它假定该程序是在旧版Windows上编写的。 这些function会造成麻烦,特别是Windows对Aero窗口大小的误解是很麻烦的。 当它可以看到程序被devise为在具有Aero的Windows版本上运行时,它停止躺在Aero窗口的胖边框上。

您可以通过使用/子系统选项在程序集上运行Editbin.exe来更改该版本号并将其设置回4.00。 这个答案显示了一个样例postbuild事件。

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

当然,没有什么能够帮助您停止使用仅在.NET 4.5上提供的类和方法。 当你这样做的时候,你的程序在4.0上运行时会失败,出现TypeLoadException或者MissingMethodExceptionexception

只要目标4.0,所有这些问题消失。 或者打破僵局,停止支持XP,这是一个程序员不能经常做的商业决定,但是可以通过指出它造成的麻烦来鼓励。 支持古代操作系统的成本当然是非零的,只是testing工作量很大。 一个pipe理经常不被认可的成本,Windows的兼容性是传说中的,除非被指出来。 把这笔费用转交给客户,他们往往会更快地做出正确的决定:)但我们不能帮助你。

不幸的是,你不能在XP上运行4.5程序。

并从该连接页面的相关post:

由微软于23/03/2012在10:39发布
感谢您的报告。 此行为是在.NET Framework 4.5 Beta中devise的。 支持的最低操作系统是Windows 7,Windows Server 2008 SP2和Windows Server 2008 R2 SP1。 Windows XP不是Beta版本支持的操作系统。

尝试单声道:

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

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

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

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

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