Jus*_*ony 85 .net c# compatibility .net-4.0 .net-4.5
首先,我已阅读以下内容:
所以,从最后一个子弹,我真的认为没有办法解决这个问题,但我必须看看我是否可以获得一个明确的答案,因为我的团队希望从.NET 4.0升级到.NET 4.5.但是,我们必须支持XP.
如果我们想支持XP,是否有可能进入.NET 4.5?
我唯一能想到的是创建两个独立的解决方案,但如果我们使用.NET 4.5功能,那么代码库就必须分歧.
所以,我正在寻找一些我找不到的惊人解决方法,其他人可能已经知道了.
Han*_*ant 184
我对发布这个答案犹豫不决,实际上它在技术上是可行的,但在实践中并没有那么好用.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
...
Run Code Online (Sandbox Code Playgroud)
.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上的kaboom,您的程序说要在Mscorlib中查找属性,由.NET 4.5版本的System.Core引用程序集中的[TypeForwardedTo]属性启用.但是当你在.NET 4.0上运行程序时它就不存在了
当然,没有任何东西可以帮助您停止使用仅在.NET 4.5上提供的类和方法.执行此操作时,在4.0上运行时,程序将失败并出现TypeLoadException或MissingMethodException
只针对4.0,所有这些问题都消失了.或者打破僵局并停止支持XP,这是程序员不能经常做出的商业决策,但肯定可以通过指出它造成的麻烦来鼓励.当然,必须支持古老的操作系统需要非零成本,只需要大量的测试工作.管理不经常识别的成本,Windows兼容性具有传奇色彩,除非向他们指出.将成本转发给客户并且他们倾向于更快地做出正确的决定:)但我们无法帮助您.
Ozt*_*aco 21
以及Connect页面中的相关帖子:
微软发表于23/03/2012 10:39
感谢您的报告.此行为是在.NET Framework 4.5 Beta中设计的.支持的最低操作系统是Windows 7,Windows Server 2008 SP2和Windows Server 2008 R2 SP1.Windows XP不是Beta版本支持的操作系统.
小智 7
尝试单声道:
http://www.go-mono.com/mono-downloads/download.html
此下载适用于所有版本的Windows XP,2003,Vista和Windows 7.
小智 7
Mono项目放弃了Windows XP支持并"忘记"提及它.虽然他们仍然声称Windows XP SP2是支持的最低版本,但它实际上是Windows Vista.
支持Windows XP的Mono的最新版本是3.2.3.
| 归档时间: |
|
| 查看次数: |
127443 次 |
| 最近记录: |