場景
在 目標框架 為 .NET Framework 4 的程序中,引用 目標框架 為 .NET Framework 2.0 的程序集,並使用 .NET Framework 2.0 程序集中的類型或者靜態方法。
問題
一般情況下,會報出如下錯誤
未經處理的異常: System.IO.FileLoadException: 混合模式程序集是針對“v2.0.50727”版的運行時生成的,在沒有配置其他信息的情況下,無法在 4.0 運行時中加載該程序集。
解決
文檔參考
在 .NET Framework 的文檔 中 配置文件架構 這一節對上述問題有解決方法。詳見 <startup> 元素 中關於 useLegacyV2RuntimeActivationPolicy
特性的描述。
簡單來說
當你需要且不得不在 目標框架 為 .NET Framework 4 的程序中,引用 目標框架 為 .NET Framework 2.0 的程序集,那么你應該修改程序配置文件。
一般來說,程序配置文件在項目根目錄中,名為 “app.config” 。 默認內容如下:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
如果你項目中沒有的話,可以手動添加,並在 “csproj” 文件中添加一條:
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
根據 <startup> 元素 中的說法,你需要將“app.config”配置文件修改為:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
即可在程序中引用目標框架 為 .NET Framework 2.0 的程序集。
發布事項
當程序 Release 之后,在 Release 文件夾中會同時生成 “xxx.exe.config” 文件,此文件就是程序的配置文件。假如你沒有使用默認配置,那么在發布時,此文件應隨可執行程序一同發布,且保持在同一文件夾中。否則,程序將會使用默認配置。
其他
關於程序的配置文件,更多詳細內容可以參閱 .NET Framework 的配置文件架構 。