2013-05-07 40 views
3

我在正確設置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

謝謝你所有的答案。

+0

ildasm不使用反射;它使用低級的IL解析器 – 2013-05-07 11:54:14

回答

-1

好的我已經設法解決它。問題出在Assembly類的加載方法上。

我正在使用Assembly.LoadFrom以DLL的完整路徑作爲參數。我意識到當我用2.0.0.0版加載我的庫時,Assembly.LoadFrom返回了我的第一個庫,我已經通過CodeBase屬性驗證了它,它指向庫版本1.0.0.0的位置而不是2.0.0.0 。

我已將我的加載代碼更改爲Assembly.LoadFile,現在它工作正常。

var assembly = Assembly.LoadFile(assemblyName);