我在正確設置Assembly版本時遇到了問題,然後通過反射來獲取它。我發現了一個解決辦法,但我仍然好奇,爲什麼它的行爲像這樣...設置組件版本並通過反射 - 始終版本1.0.0.0?
我有一個類庫項目,我加載它,並通過下面的代碼讀取版本:
var assembly = Assembly.LoadFrom(assemblyName);
var version= assembly.GetName().Version;
我得到一個好的結果:
assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
version "1.0.0.0"
但現在我在類庫項目大會版本和文件版本領域的2.0.0.0值發生了變化。我編譯了它,並運行IL DASM來比較這兩個庫。
無處不在IL DASM,即在Main Window中,在Manifest中,在Metainfo中,我看到我的新庫有2.0.0.0版本,而前面的庫有1.0.0.0,所以我很高興萬事皆正確。
但後來我又回到我的申請,我已經加載了2.0.0.0版本的程序集,這是結果:
assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
version "1.0.0.0"
所以反射不回我的好版本值。 解決方法是使用FileVersionInfo類:
FileVersionInfo.GetVersionInfo(assemblyName).FileVersion;
現在,我得到了正確的結果。
我的問題是:還有什麼我需要改變我的類庫項目,以便能夠通過反射機制檢索一個好的版本?爲什麼IL DASM顯示出正確的版本,而反思卻不是?我一直認爲引擎蓋下的IL DASM利用了反射,但現在看起來好像是s
謝謝你所有的答案。
ildasm不使用反射;它使用低級的IL解析器 – 2013-05-07 11:54:14