.net DLL之間是通過AssemblyVersion建立參考關聯性的

來源:互聯網
上載者:User

  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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.