AssemblyVersion對程式集間的引用很重要,此版本號碼一般不要隨便改,也不要讓其自動產生,如果項目很多,類庫間引用很多你這麼做了的話,很可能把dll搞亂,解釋:
類庫ClassA設定:[assembly: AssemblyVersion("1.0.0.*")]
類庫ClassB引用了ClassA
如果對ClassB重建,則ClassB將關聯ClassA(假設AssemblyVersion為1.0.0.1),將產生的兩個dll檔案都Copy到某一目錄CommonDLL,然後在ConsoleC項目裡引用CommonDLL\ClassB.dll後,產生時會自動引用CommonDLL\ClassA.dll到ConsoleC項目的bin目錄下。
而如果後來單獨產生了ClassA.dll(假設AssemblyVersion為1.0.0.2),並替換CommonDLL下的這一個檔案,此時產生ConsoleC項目時你會發現只有ClassB.dll而沒有ClassA.dll,並且不會產生失敗!但運行ConsoleC項目時會報錯:
未能負載檔案或程式集“ClassA, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null”或它的某一個依賴項。系統找不到指定的檔案。
(以上舉例是單獨產生ClassA.dll,實際中你可能是多個公用的項目又引用了公用的ClassA,而每個項目重建時都產生了不同AssemblyVersion的ClassA.dll,然後這些公用的DLL又都被同一個項目引用,最終導致ClassA.dll是哪個類生的,很就亂大了。)
這個過程類似強命名,但又不是強命名,但dll間的引用就是使用這種方式來關聯各DLL的。
但我們還是要實現版本功能,以便排錯,這時我們可以使用[assembly: AssemblyFileVersion("1.0.5.0")],因為他只是個檔案版本號碼,供人看的,類似備忘一類的功能,不參與dll間的引用。或者保證每次這些版本間的引用都正確,但這個在開發階段很難做到,可以在產品發布的時候去做,但柳永法(yongfa365)'Blog覺得如果不是要做成強命名DLL,沒必要這麼做。
首發地址:
.net DLL之間是通過AssemblyVersion建立參考關聯性
http://www.yongfa365.com/Item/DLL-Reference-By-AssemblyVersion.html