2010-06-04 51 views
5

通過MSDN文章How the Runtime Locates Assemblies讀,也讀this後,我仍然不確定如何弱命名程序集在運行時得到解決。.NET程序集解決混亂

例如,如果我在項目中引用了某個dll文件,我就編譯和部署,如果我只是替換在編譯時實際引用的舊文件,它是否會選取新版本的引用的dll文件?如果項目文件中的引用指定了引用程序集的版本等,是否重要?

任何啓示歡迎

回答

0

回答你的問題是肯定的,只要只要你有Specific Version設置爲False在爲參考裝配的屬性。

+0

這是不正確的,它只適用於編譯時。 – 2010-06-04 10:02:54

1

我發現,瞭解這是Grimes的融合研討會作爲可以發現here最好的地方。這是非常全面的,但仍然容易理解。

0

如果版本沒有提到它會拿起參考,如果版本提到它會嘗試找到並加載程序集匹配的版本中提到的簽名。如果沒有找到它會拋出異常。要解決此問題,您可以執行程序集綁定重定向。

2

如果在GAC中沒有找到組件,然後CLR將在「探測路徑」進行搜索。默認情況下,它只是包含EXE的目錄。它僅查找程序集名稱上的匹配項,並停止搜索第一個匹配項。

它接着檢查[的AssemblyVersion]號碼。如果不匹配,你會得到一個異常,它不會繼續尋找具有相同名稱的另一個程序集。無論何時遇到解決方法問題,您都需要使用Fuslogvw.exe實用程序。它向你展示了CLR究竟在哪裏以及哪裏出了問題。

+0

弱引用是否會影響版本號?我的經驗是,如果您處於探索路徑中,它只是按名稱匹配(不確定GAC,但不會太弱)。 – 2010-06-04 10:08:05

+1

是否強名與否無關緊要。只有GAC能夠通過版本號解析引用的程序集。探測路徑搜索只能通過名稱完成,發現程序集後仍會檢查版本號。 – 2010-06-04 10:43:50