.NET4.0下使用Net2.0类库或程序集
最近在项目上一直使用.net4.0 framework,使用ffmepeg下的一个dll时,提示只能在2.0下运行,解决方法如下:
app.config中添加一个配置节:startup
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v2.0"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
在.NET2.0 framework,.NET3.5 framework的时候,由于程序运行环境本质还是.NET2.0,而到了.NET4.0由于整个程序集的版本更新,以前使用.NET2.0所编写的程序集与.NET4.0的程序集互操作的时候就会出现兼容性问题。
通过MSDN,我们可以知道,startup配置节中的useLegacyV2RuntimeActivationPolicy属性是在.NET4.0中新增的,默认是false,表示:使用默认的 .NET Framework 4 激活策略,该激活策略将加载 .NET Framework 4.0,通过使用公共语言运行时 (CLR) 版本 4.0 所创建的程序集,以及 CLR 早期版本通过使用受支持的低于版本 4.0 的最高 CLR 版本所创建的程序集。
现在如果当程序在.NET4.0环境下要使用.NET2.0或.NET3.5及以下的程序集时就必须将useLegacyV2RuntimeActivationPolicy设置为true,同时还要注意,需要在startup配置节的字节中添加supportedRuntime配置节,并指定为”v4.0″,表示使用.NET4.0运行时来运行程序。
<supportedRuntime> 元素
指定应用程序支持的公共语言运行时版本。 此元素应由用 .NET Framework 1.1 版或更高版本生成的所有应用程序使用。
<supportedRuntime version=”runtime version” sku=”sku id”/>
| 
 特性  | 
 描述  | 
|---|
version
可选特性。
一个字符串值,它指定此应用程序支持的公共语言运行时 (CLR) 版本。 有关 version 特性的有效值的信息,请参阅“运行时版本”值部分。
 注意 | 
|---|
| 
 运行时版本”值的形式为主版本号.次版本号.内部版本号。 从 .NET Framework 4 开始,仅主版本号和次版本号是必需的(即“v4.0”而不是“v4.0.30319”)。 建议使用较短字符串。  | 
| 
 sku  | 
 可选特性。 一个字符串值,该值指定库存单位 (SKU),库存单位则指定此应用程序支持的 .NET Framework 版本。 sku 特性。 若存在该特性,则它指示应用面向的 .NET Framework 版本。 “SKU ID”值 部分。  | 
<supportedRuntime> 元素,则使用用于生成应用程序的运行时版本。
< supportedRuntime> 元素应由使用运行时 1.1 版或更高版本生成的所有应用程序使用。 仅为支持运行时 1.0 版而生成的应用程序必须使用 <requiredRuntime> 元素。
 注意 | 
|---|
| 
 CorBindToRuntimeByCfg 函数来指定配置文件,则必须使用适用于所有运行时版本的 <requiredRuntime> 元素。 当你使用 CorBindToRuntimeByCfg 时,<supportedRuntime> 元素将被忽略。  | 
对于支持从 .NET Framework 1.1 到 3.5 的运行时版本的应用,支持多个运行时版本时,第一个元素应指定优先级最高的版本,最后一个元素应指定优先级最低的版本。 对于支持 .NET Framework 4.0 或更高版本的应用,version 特性指示普遍适用于 .NET Framework 4 及更高版本的 CLR 版本,而 sku 特性指示应用所面向的单个 .NET Framework 版本。
 注意 | 
|---|
| 
 CorBindToRuntimeEx 函数),并且你希望这些路径激活 CLR 的版本 4(而不是较早的版本),或者你的应用程序是用 .NET Framework 4 生成的,但在使用较早版本的 .NET Framework 生成的混合模式程序集上有依赖项,则不足以在受支持的运行时列表中指定 .NET Framework 4。 此外,在配置文件的 <startup> 元素中,必须将 useLegacyV2RuntimeActivationPolicy 特性设置为 true。 但是,将此特性设置为 true 意味着,用 .NET Framework 早期版本生成的所有组件都使用 .NET Framework 4(而不是生成它们时所用的运行时)运行。  | 
建议使用应用程序可在其上运行的所有 .NET Framework 版本来测试这些应用程序。
version特性的运行时版本值的有效值。
| 
 .NET Framework 版本  | 
 version 特性  | 
|---|---|
| 
 1.0  | 
 “v1.0.3705”  | 
| 
 1.1  | 
 “v1.1.4322”  | 
| 
 2.0  | 
 “v2.0.50727”  | 
| 
 3.0  | 
 “v2.0.50727”  | 
| 
 3.5  | 
 “v2.0.50727”  | 
| 
 4.0  | 
 “v4.0”  | 
| 
 4.5  | 
 “v4.0”  | 
| 
 4.5.1  | 
 “v4.0”  | 
| 
 4.5.2  | 
 “v4.0”  | 
| 
 4.6  | 
 “v4.0”  | 
| 
 4.6.1  | 
 “v4.0”  | 
sku 特性支持的 .NET Framework 版本(自 .NET Framework 4 起)。 sku 特性指示应用面向的 .NET Framework 版本。
| 
 .NET Framework 版本  | 
 sku 特性  | 
|---|---|
| 
 4.0  | 
 “.NETFramework,Version=v4.0”  | 
| 
 4.0,客户端配置文件  | 
 “.NETFramework,Version=v4.0,Profile=Client”  | 
| 
 4.0,平台更新 1  | 
 .NETFramework,Version=v4.0.1  | 
| 
 4.0,客户端配置文件,Update 1  | 
 .NETFramework,Version=v4.0.1,Profile=Client  | 
| 
 4.0,平台更新 2  | 
 .NETFramework,Version=v4.0.2  | 
| 
 4.0,客户端配置文件,Update 2  | 
 .NETFramework,Version=v4.0.2,Profile=Client  | 
| 
 4.0,平台更新 3  | 
 .NETFramework,Version=v4.0.3  | 
| 
 4.0,客户端配置文件,Update 3  | 
 .NETFramework,Version=v4.0.3,Profile=Client  | 
| 
 4.5  | 
 “.NETFramework,Version=v4.5”  | 
| 
 4.5.1  | 
 “.NETFramework,Version=v4.5”  | 
| 
 4.5.2  | 
 “.NETFramework,Version=v4.5”  | 
| 
 4.6  | 
 “.NETFramework,Version=v4.5”  | 
| 
 4.6.1  | 
 “.NETFramework,Version=v4.5”  | 
sku 特性值,当 version 特性为 v4.0 且 sku 特性标识 .NET Framework 4 或它的一个平台更新 (PU) 时,应用程序将在安装的哪一个 .NET Framework 4 版本上运行。
| 
 sku 特性的值  | 
 4.0 Client  | 
 4.0 Full  | 
 4.0 Client + PU 1  | 
 4.0 Full + PU 1  | 
 4.0 Client + PU 2  | 
 4.0 Full + PU 2  | 
 4.0 Client + PU 3  | 
 4.0 Full + PU 3  | 
 4.5 和更高版本  | 
|---|---|---|---|---|---|---|---|---|---|
| 
 .NETFramework,Version=v4.0,Profile=Client  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
| 
 .NETFramework,Version=v4.0  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
||||
| 
 .NETFramework,Version=v4.0.1,Profile=Client  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
||
| 
 .NETFramework,Version=v4.0.1  | 
 是  | 
 是  | 
 是  | 
 是  | 
|||||
| 
 .NETFramework,Version=v4.0.2,Profile=Client  | 
 是  | 
 是  | 
 是  | 
 是  | 
 是  | 
||||
| 
 .NETFramework,Version=v4.0.2  | 
 是  | 
 是  | 
 是  | 
||||||
| 
 .NETFramework,Version=v4.0.3,Profile=Client  | 
 是  | 
 是  | 
 是  | 
||||||
| 
 .NETFramework,Version=v4.0.3  | 
 是  | 
 是  | 
示例
下面的示例演示如何在配置文件中指定支持的运行时版本。 配置文件指示应用面向 .NET Framework 4.6。
<configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> </startup> </configuration>
此元素可用于应用程序配置文件中。





