特定版本(Specific Version)屬性


一、設置特定版本屬性

 二、屬性說明

1.“特定版本”這個屬性僅在編譯時有效,在程序運行時,不發揮作用

2.編譯項目時,需要解析項目的程序集引用,以便找到編譯時應使用的物理程序集(.dll文件)。

如果“特定版本”被設置為true,它會影響程序集解析過程,執行如下特定版本信息的檢查(假設引用中存在版本信息):

(1)編譯系統定位它可能使用的所有物理程序集
(2)編譯系統比較“具體的物理程序集的版本”與“ .csproj 文件中存儲的程序集版本”,以確定是否使用這個物理程序集:
    如果兩個程序集版本完全相同,則解析過程成功,找到了用於編譯的物理程序集;
    如果兩個程序集版本不匹配,則丟棄這個物理程序集。
      解析過程繼續進行(編譯系統定位到下一個候選的物理程序集);
(3)如果找不到更多候選的物理程序集,則解析過程失敗。
    這會導致編譯器發出警告(警告 MSB3245),告訴您無法解析引用。
    有趣的是,編譯工作仍然會繼續下去!如果代碼沒有對程序集的實際引用,則編譯成功(帶有前面提到的警告)。如果代碼里有引用,則編譯失敗並顯示錯誤,告訴您代碼使用了未知類型或命名空間。

3.編譯系統解析物理程序集的順序

(1).csproj 文件中 <HintPath> 元素指定的

 (2)項目輸出路徑(/Debug目錄)

 (3)GAC

  請注意,在“特定版本”為false時,如果 GAC 中存在多個版本的程序集,則解析過程首先嘗試解析具有最高版本的程序集。 

4.編譯時是否執行引用的特定版本檢查,依據2個來自.csproj文件的信息:

  • 是否存在<SpecificVersion> 標簽,以及它的值 (如果標簽存在)
  • 引用標簽<Reference>是否含有版本信息

  以下例子,既有<SpecificVersion> 標簽和它的值 True ,也有版本信息:Version=1.2.3.4

<Reference Include="Foo, Version=1.2.3.4, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
  <HintPath>..\..\Bar\Foo.dll</HintPath>
</Reference>

  編譯時是否執行引用的特定版本檢查的回答,如下表:

5.對“復制本地”的影響

  

  如果“復制本地(Copy Local)”屬性設置為“True”,但程序集解析過程因“特定版本”檢查而失敗,則不會復制任何程序集到輸出目錄(/Debug)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM