2009-10-22 139 views

回答

20

如果兩個程序集都是強命名的(簽名),CLR將始終從GAC加載。

下面是運行時用來解析程序集引用(從How the Runtime Locates Assemblies)步驟:

  1. 通過檢查適用 配置文件,包括 應用程序配置文件, 發行商確定正確的程序集版本策略文件和機器 配置文件。如果 配置文件位於 遠程計算機上,則運行時必須首先定位並下載應用程序 配置文件 。

  2. 檢查程序集名稱是否已被綁定到之前,如果是, 使用先前加載的程序集。 如果先前加載 組件的請求失敗,請求將立即失敗 而不會嘗試加載 程序集。

  3. 檢查全局程序集緩存。如果在那裏找到程序集,則 運行時使用此程序集。

  4. 探頭的組件(...一些材料省略......)

正如在同一篇文章後說:

沒有版本檢測組件沒有強名稱,運行時 也沒有在全局程序集緩存中檢入沒有強名稱的程序集。

因此,如果您有能力從本地程序集中刪除簽名,那麼應用程序將使用它而不是GAC中的簽名。

有關運行時綁定機制的更多細節,請參閱Suzanne Cook's blog

This blog entry from Scott Hanselman也提供了一個很好的綁定過程的概述。

-1

要成功部署您的.NET Framework應用程序,您必須瞭解公共語言運行庫如何定位並綁定到組成應用程序的程序集。默認情況下,運行時嘗試與構建應用程序的程序集的確切版本綁定。該默認行爲可以被配置文件設置覆蓋。

您可以使用Windows軟件開發工具包(SDK)中包含的程序集綁定日誌查看器(Fuslogvw.exe)查看日誌文件中的綁定信息。

小號