首先在MSDN上看到 4.0 的更新日志中有如下这条:
.NET Framework 4 不能自动使用自己的公共语言运行时版本来运行由 .NET Framework 早期版本生成的应用程序。 若要使用 .NET Framework 4 运行较早的应用程序,则必须使用 Visual Studio 中项目的属性指定的目标 .NET Framework 版本编译应用程序, 或使用应用程序配置文件中的 <supportedRuntime> 元素 可指定所支持的运行时。
解决方案就是在app.config中添加一个配置
<?xml version="1.0" encoding="utf-8"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v2.0.50727"/> <supportedRuntime version="v4.0" /> </startup> </configuration>
应用的版本兼容性
默认情况下,应用将在其目标 .NET Framework 版本上运行。 如果该版本不存在且应用配置文件未定义支持的版本,则可能出现 .NET Framework 初始化错误。 在此情况下,尝试运行应用程序将失败。
若要定义运行应用的特定版本,请将一个或多个 <supportedRuntime> 元素添加到应用的配置文件中。 每个 <supportedRuntime>
元素都列出了支持的运行时版本,第一个元素指定了优先级最高的版本,最后一个元素指定了优先级最低的版本。
<configuration> <startup> <supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v4.0" /> </startup> </configuration>
有关详细信息,请参阅如何:将应用配置为支持 .NET Framework 4 或 4.x。
具体步骤如下:
1、在.net2.0程序项目下添加应用程序配置文件 App.config 或者app.config,内容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v2.0.50727"/> <supportedRuntime version="v4.0" /> </startup> </configuration>
2、重新生成程序
在原来.NET2.0,.NET3.5的时候,由于程序运行环境本质还是.NET2.0,而到了.NET4.0由于整个程序集的版本更新,以前使用.NET2.0所编写的程序集与.NET4.0的程序集继续拧互操作的时候就会出现上面所说的兼容性问题。
通过MSDN,我们可以知道,startup配置节中的useLegacyV2RuntimeActivationPolicy属性是在.NET4.0中新增的,默认是false,表示:使用默认的 .NET Framework 4 激活策略,该激活策略将加载 .NET Framework 4 通过使用公共语言运行时 (CLR) 版本 4 所创建的程序集,以及 CLR 早期版本通过使用受支持的低于版本 4 的最高 CLR 版本所创建的程序集。
现在如果当程序在.NET4.0环境下要使用.NET2.0及.NET3.5的程序时就必须将useLegacyV2RuntimeActivationPolicy设置为true,同时还要注意,需要在startup配置节的字节中添加supportedRuntime配置节,并指定为"v4.0",表示使用.NET4.0运行时来运行程序。
注意:
useLegacyV2RuntimeActivationPolicy 特性