用.net 4.5构建的应用程序能在.net 4.0上运行吗?

本文关键字:net 运行 应用程序 构建 | 更新日期: 2023-09-27 18:09:48

我的项目目标是。net 4.5。它没有使用任何新的4.5方法,所以它在只安装。net 4.0的机器上运行得很好。

这一切都很好,直到我添加了一些扩展方法和反射。然后,当我在4.0机器上运行这个。net 4.5程序时,它失败了,显示"System. net"。无法加载类型"System.Runtime.CompilerServices"。ExtensionAttribute' from assembly mscorlib '。著名的ExtensionAttribute程序,在这里有很好的文档。

另一种快速测试方法是添加以下行。那么程序只在。net 4.0上运行时会抛出异常。

Console.WriteLine(typeof(System.Runtime.CompilerServices.ExtensionAttribute).Assembly.FullName);

我想知道是否有一种方法来解决它。例如,ILMerge(当使用链接中记录的正确的/targetplatform选项时)实际上将ExtensionAttribute从mscorlib更改为System。如果项目的目标是。net 4.0(已安装4.5)。但它似乎在针对。net 4.5的项目中不起作用。

我知道这是一个很长的机会。但我只是想看看有没有人有其他的想法,因为它是如此接近。

谢谢。

用.net 4.5构建的应用程序能在.net 4.0上运行吗?

一般来说,这是行不通的。在某些情况下确实可以工作,因为4.5是4.0的适当替代品,但一般情况下它不会工作。就我个人而言,我见过一些类型移到不同的程序集中的问题,并且绑定没有正确设置,就像您看到的那样。反射类型并不是4.5中唯一被移动的类型。

我的项目目标是。net 4.5。它没有使用任何新的4.5方法,所以它在只安装。net 4.0的机器上运行得很好。

如果是这种情况,您可以将应用程序更改为目标。net 4.0。这应该允许它在只安装了。net 4的机器上安全运行。