關於dll發布後的版本資訊:
AssemblyVersion, AssemblyFileVersion, AssemblyInformationalVersion的小細節, 將網路上看到的文章做個筆記。
偶爾會遇到類似以下的錯誤訊息
基本上要解決這個問題就是透過在config(Web.config/ App.config)設定bindingRedirect
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
[說明]
- assemblyIdentity設定對應哪個dll, 另外publicKeyToken可以用powershell取得, 指令如下:
([system.reflection.assembly]::loadfile("D:\Mine\MVC練習\EF6-Code-First-Demo\EF6CodeFirstDemo\bin\Debu
g\Newtonsoft.Json.dll")).FullName
黃字的部分換成對應的路徑, 結果會如下圖
- bindingRedirect設定版號對應
- oldVersion - 那些版號要對應 - 可以用
-
來包含版號區間。 - newVersion - 在
oldVersion
符合的版號要對應到那個版號
[解決方法]
讓visual studio自動binding, 分為console專案和web專案不同
console專案
step 1. 先卸載專案
step 2. 編輯 .csprojstep 3. 手動加入AutoGenerateBindingRedirects到PropertyGroup
4. 重新建置專案
p.s 若target版本為.net framework 4.5.2之後會自動有加上此設定
web專案
和console不同,VS不會自動調整Web.config
,但是VS會有提示。 建置完檢查warning....
可以直接對warning點兩下,會自動問說要不要加入,如果要加入,會自動修改Web.config
前述所提及的bindingRedirect需設定的oldVersion / newVersion的版號到底是從何出來?
則必須從專案中 AssemblyInfo.cs 這個檔案的這個屬性
[assembly: AssemblyVersion("1.0.*")]
若設定為此則會自動跳號, 即為下圖34行的地方, 跳號規則詳見黑暗大文章 http://blog.darkthread.net/post-2008-07-29-about-asm-version.aspx#12078
-
AssemblyVersion
為必要屬性,是參照組件的重要依據,一旦版號改變,參照該組件的程式必須更新(重新編譯或設定組件繫結重新導向)。 -
AssemblyFileVersion
主要用於部署管理,可以每次部署時遞增以便區隔,是安裝程式常用的版本依據,實務上可由MSBuild產生(但要自己寫邏輯)。如果想不驚動相關程式悄悄換版,可以維持同一個AssemblyVersion,只編譯成AssemblyFileVersion不同的DLL檔。若未指定AssemblyFileVersion,系統會用AssemblyVersion版號當作AssemblyFileVersion。 AssemblyFileVersion可以用檔案總管檢視(即前面附圖所示的「檔案版本」)。 -
AssemblyInformationalVersion
產品版本。它不像AssemblyVersion跟AssemblyFileVersion限定格式為四節數字,允許寫成"0.9 Beta Version"、"1.0 Release Candidate"之類的可讀文字,但過去曾出現過相關工具處理非數字AssemblyInformationalVersion的相容問題(例:Issue1、Issue2)。當組件未指定AssemblyInformationalVersion時,系統會使用AssemblyVersion代替。
引用參考:
http://blog.darkthread.net/post-2008-07-29-about-asm-version.aspx#12078
http://blog.darkthread.net/post-2015-11-25-assemblyinformationversion.aspx