我們擁有不同版本的非強名稱程序集,並且在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文檔,除非程序集是強命名的,否則將忽略所述版本。我會看看我能不能挖掘它。
它不可能按照你描述的方式工作。 CLR無法在不改變探測路徑的情況下在LAC子目錄中找到DLL。 – 2010-02-12 15:46:19
你有兩個不同版本的裝配體的目的是什麼?你不能只加載最新的應用程序工作? – 2010-02-27 10:19:28
有兩個不同的版本,因爲應用程序由不同團隊編寫的不同插件組成,每個插件都可以使用不同版本的程序集。 通常,我們通過探測路徑/綁定重定向使用最高版本。但我只想知道CLR是否忽略了非強命名程序集的版本控制。 – 2010-02-27 12:58:16