最近在項目上一直使用.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 特性的有效值的信息,請參閱“運行時版本”值部分。
|
||
sku |
可選特性。 一個字符串值,該值指定庫存單位 (SKU),庫存單位則指定此應用程序支持的 .NET Framework 版本。 從 .NET Framework 4.0 起,建議使用 sku 特性。 若存在該特性,則它指示應用面向的 .NET Framework 版本。 有關 SKU 特性的有效值的信息,請參閱 “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 起)。 請注意,自 .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>
此元素可用於應用程序配置文件中。