2009-10-22 122 views
16

我有3個項目(GUI,BL和DAL)的解決方案。 DAL程序集已簽署並部署在GAC中。.NET程序集加載優先級

當我構建解決方案時,DAL被編譯並且程序集放置在主項目的bin文件夾中。但是當我運行應用程序時,它會加載GAC版本而不是本地版本。爲什麼是這樣?

我意識到,因爲GAC中的版本不是最新版本,並且某些方法丟失了,儘管它編譯得很好。

GAC是否優先於本地bin文件夾?

韓國社交協會提前

回答

19

簡答題,GAC優先於本地文件。
這是一個不同於我們在原生dll世界中使用的行爲(不包括某些總是從SYSTEM32加載的系統dll,無論如何)。

爲什麼?
想象一下,如果程序集有一個錯誤,那麼現在有多個應用程序使用相同的程序集,那麼如何修復所有應用程序? 很難開始搜索所有驅動程序上的所有應用程序,因此更容易將單個程序集部署到GAC並一次性修復所有應用程序。

至於你的問題,如果你改變了API,你需要改變該程序集的程序集版本,這樣Fusion融合引擎會選取本地文件夾中的版本。

+0

Tks的答案,特別是關於版本控制的最後部分。 – Dante 2009-10-22 10:31:22

7

是的,它首先檢查GAC。加載規則記錄在here。要解決您的問題,您應該在更改API時更新程序集版本。

+0

Tks爲鏈接,非常有用! – Dante 2009-10-22 10:32:30