Dot-Net

.NET 4.0 有一個新的 GAC,為什麼?

  • April 17, 2010

%windir%\Microsoft.NET\assembly\是新的GAC。這是否意味著現在我們必須管理兩個 GAC,一個用於 .NET 2.0-3.5 應用程序,另一個用於 .NET 4.0 應用程序?

問題是,為什麼?

是的,因為有 2 個不同的全域程序集記憶體 (GAC),您必須單獨管理它們中的每一個。

在 .NET Framework 4.0 中,GAC 進行了一些更改。GAC 分為兩部分,每個 CLR 一個。

用於 .NET Framework 2.0 和 .NET Framework 3.5 的 CLR 版本是 CLR 2.0。在前兩個框架版本中沒有必要拆分 GAC。在 Net Framework 4.0 中破壞舊應用程序的問題。

為了避免 CLR 2.0 和 CLR 4.0 之間的問題,GAC 現在被拆分為每個執行時的私有 GAC。主要變化是 CLR v2.0 應用程序現在無法在 GAC 中看到 CLR v4.0 程序集。

資源

為什麼?

這似乎是因為 .NET 4.0 中發生了 CLR 更改,但 2.0 到 3.5 中沒有。1.1 到 2.0 CLR 也發生了同樣的事情。似乎 GAC 有能力儲存不同版本的程序集,只要它們來自同一個 CLR。他們不想破壞舊的應用程序。

請參閱MSDN 中有關 4.0 中的 GAC 更改的以下資訊。

例如,如果 .NET 1.1 和 .NET 2.0 共享相同的 GAC,則 .NET 1.1 應用程序從該共享 GAC 載入程序集可能會獲取 .NET 2.0 程序集,從而破壞 .NET 1.1 應用程序

用於 .NET Framework 2.0 和 .NET Framework 3.5 的 CLR 版本是 CLR 2.0。因此,在前兩個框架版本中沒有必要拆分 GAC。破壞舊的(在本例中為 .NET 2.0)應用程序的問題在 Net Framework 4.0 中重新出現,此時 CLR 4.0 發布。因此,為了避免 CLR 2.0 和 CLR 4.0 之間的干擾問題,現在將 GAC 拆分為每個執行時的私有 GAC。

隨著 CLR 在未來版本中的更新,您可以期待同樣的事情。如果只是語言發生變化,那麼您可以使用相同的 GAC。

引用自:https://stackoverflow.com/questions/2660355