2010-02-12 103 views
5

我們擁有不同版本的非強名稱程序集,並且在app.exe.config中沒有綁定重定向/探測它們的路徑。例如,MyDll(1.0.0.0_null_neutral)和MyDll(2.0.0.0_null_neutral)。相對於app.exe,這些程序集存儲在LAC \ MyDll_1.0.0.0_null_neutral和LAC \ MyDll_2.0.0.0_null_neutral中。.NET運行時如何找到非強名稱的程序集?

我的理解是,因爲MyDll程序集不是強命名的,.NET運行時不區分不同版本的MyDll。因此,如果MyDll 1.0.0.0已經加載到內存中,並且執行了一些針對MyDll 2.0.0.0構建的代碼,則.NET運行時將不會加載MyDll 2.0.0.0。

但是,當我使用VS2008連接到進程並查看模塊窗口時,我注意到MyDll 1.0.0.0和MyDll 2.0.0.0都是從LAC文件夾加載的。

我的理解似乎在某處存在差距。有人可以指出嗎?編輯: 感謝迄今的迴應。是的,我跳過那一點。可執行程序監聽AssemblyResolve事件,並通過查看LAC來處理它。

我很確定我在之前看到過一些MSDN文檔,除非程序集是強命名的,否則將忽略所述版本。我會看看我能不能挖掘它。

+3

它不可能按照你描述的方式工作。 CLR無法在不改變探測路徑的情況下在LAC子目錄中找到DLL。 – 2010-02-12 15:46:19

+0

你有兩個不同版本的裝配體的目的是什麼?你不能只加載最新的應用程序工作? – 2010-02-27 10:19:28

+0

有兩個不同的版本,因爲應用程序由不同團隊編寫的不同插件組成,每個插件都可以使用不同版本的程序集。 通常,我們通過探測路徑/綁定重定向使用最高版本。但我只想知道CLR是否忽略了非強命名程序集的版本控制。 – 2010-02-27 12:58:16

回答

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

第2步是檢查,看它是否被加載,這是特定版本,甚至是不強命名的項目。

步驟4試圖通過探測加載程序集,但這不是特定於版本的。

我感到困惑的是,如果你的配置文件中沒有任何信息,它是如何在第一個地方找到DLL的?我認爲我的理解也存在差距:-)。

相關問題