3 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊
是的,因為有2個不同的全局程序集緩存(GAC),您必須單獨管理它們中的每一個。
在.NET Framework 4.0中,GAC經(jīng)歷了一些更改。GAC分為兩個,每個CLR一個。
用于.NET Framework 2.0和.NET Framework 3.5的CLR版本是CLR 2.0。前兩個框架版本中沒有必要拆分GAC。在Net Framework 4.0中破壞舊應(yīng)用程序的問題。
為了避免CLR 2.0和CLR 4.0之間的問題,GAC現(xiàn)在分為每個運行時的私有GAC。主要的變化是CLR v2.0應(yīng)用程序現(xiàn)在無法在GAC中看到CLR v4.0程序集。
為什么?
這似乎是因為.NET 4.0中存在CLR更改,而不是2.0到3.5。1.1到2.0 CLR也發(fā)生了同樣的事情。似乎GAC能夠存儲不同版本的程序集,只要它們來自同一個CLR。他們不想破壞舊的應(yīng)用程序。
請參閱MSDN中有關(guān)4.0中GAC更改的以下信息。
例如,如果.NET 1.1和.NET 2.0共享相同的GAC,則從此共享GAC加載程序集的.NET 1.1應(yīng)用程序可能會獲得.NET 2.0程序集,從而破壞.NET 1.1應(yīng)用程序
用于.NET Framework 2.0和.NET Framework 3.5的CLR版本是CLR 2.0。因此,前兩個框架版本中沒有必要拆分GAC。破解舊版本(在本例中為.NET 2.0)應(yīng)用程序的問題在Net Framework 4.0中重新出現(xiàn),此時CLR 4.0已發(fā)布。因此,為了避免CLR 2.0和CLR 4.0之間的干擾問題,GAC現(xiàn)在分為每個運行時的私有GAC。
隨著CLR在未來版本中的更新,您可以期待同樣的事情。如果只有語言更改,那么您可以使用相同的GAC。

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊
它沒有多大意義,原始的GAC已經(jīng)能夠存儲不同版本的程序集。并且沒有理由認(rèn)為程序會偶然引用錯誤的程序集,所有.NET 4程序集都會使[AssemblyVersion]達(dá)到4.0.0.0。新的進程內(nèi)并排功能不應(yīng)改變這一點。
我的猜測:已經(jīng)有太多的.NET項目打破了“永遠(yuǎn)不會引用GAC中的任何內(nèi)容”規(guī)則。我已經(jīng)在這個網(wǎng)站上看了好幾次。
只有一種方法可以避免破壞這些項目:移動GAC。Back-compat在微軟是神圣的。
- 3 回答
- 0 關(guān)注
- 510 瀏覽
添加回答
舉報