应用程序可以与.NET 4.5构建在.NET 4.0上运行?(Can application bui

2019-08-31 12:11发布

我的项目是针对于.NET 4.5。 它不使用任何新的4.5的方法,所以它实际上是在机器上正常工作,只有.NET 4.0安装。

这是所有的好,直到我增加了一些扩展方法和思考。 然后,当我跑了4.0的机器上这个.NET 4.5的程序,它失败,“System.TypeLoadException:未能加载类型的组件的mscorlib‘System.Runtime.CompilerServices.ExtensionAttribute’”。 已记录以及著名ExtensionAttribute程序在这里 。

另一种快速的方法来测试,这是添加以下行。 然后在只有.NET 4.0运行时,程序会抛出异常。

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

我不知道是否有一种方法来解决它。 例如,ILMerge(使用作为记录在链接正确/上投放选项时)实际上从mscorlib程序改变ExtensionAttribute到System.Core程序,如果该项目为目标的.NET 4.0(4.5安装)。 但它似乎并没有在针对.NET 4.5的项目。

我知道这是一个长镜头。 但只是想看看是否有人有其他的想法,因为它是如此接近。

谢谢。

Answer 1:

在一般情况下,这是不行的。 它在某些情况下工作,因为4.5是到位替代4.0,但它不会在一般的工作。 我个人而言,看到与已经进入不同的组件类型的问题,并绑定设置不正确,就像你所看到的。 反射类型是不是是在4.5移动唯一的类型。

我的项目是针对于.NET 4.5。 它不使用任何新的4.5的方法,所以它实际上是在机器上正常工作,只有.NET 4.0安装。

如果是这样的话,你可以只改变你的应用程序的目标.NET 4.0。 这应该允许它仅安装了.NET 4的计算机上安全地运行。



文章来源: Can application built with .NET 4.5 run on .NET 4.0?