1. 程式人生 > 實用技巧 >.NET2.0程式集無法在.net 4.0 中執行的解決方案

.NET2.0程式集無法在.net 4.0 中執行的解決方案

首先在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>

官網解釋:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/version-compatibility?redirectedfrom=MSDN

應用的版本相容性

預設情況下,應用將在其目標 .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 特性

官網解釋:https://docs.microsoft.com/zh-cn/dotnet/framework/configure-apps/file-schema/startup/startup-element?redirectedfrom=MSDN

參考官網:https://docs.microsoft.com/zh-cn/dotnet/framework/configure-apps/file-schema/startup/startup-element?redirectedfrom=MSDN

參考官網:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/version-compatibility?redirectedfrom=MSDN