2012-08-15 116 views
1

我們有大約30個項目的大型解決方案。我們還有一些通用代碼實用程序,作爲該實用程序類的一部分,我們包含一個GetAssemblyVersionInfo方法,該方法返回該程序集的版本信息。但是,我們希望獲得項目的程序集的程序集版本信息而不是實用程序DLL。有什麼辦法讓一個實用工具函數返回基於執行的另一個程序集的版本信息,而不是傳遞文件名?獲取組件版本信息

編輯:

對於那些誰是好奇,我解決它使用:

System.Reflection.Assembly.GetCallingAssembly().GetName().Version 
+0

但是,如果您在項目中調用該行,它將返回項目程序集的'版本'。不是嗎?問題在哪裏呢? – Tigran 2012-08-15 16:55:16

+0

沒錯,但我想我以前發佈的方式失敗了,因爲如果我從一層深度調用效用函數會發生什麼?它會返回另一個實用程序DLL的程序集信息,但我想要的是啓動該過程的整個應用程序。 – keelerjr12 2012-08-15 17:02:40

+1

注意:考慮明確地指定彙編作爲你的'GetAssemblyVersionInfo'方法的參數 - 這將使代碼更清潔,更具可讀性,並允許你以更有意義的方式測試它。 – 2012-08-15 17:06:51

回答

0

我認爲你應該使用GetEntryAssembly(),而不是GetCallingAssembly()

+1

每次我打電話給我時,都會得到一個NullReferenceException。有任何想法嗎? – keelerjr12 2012-08-15 17:01:12

+0

當條目組件不受管理時,'GetEntryAssembly'返回null。請注意,mstest框架的入口程序集也是非託管的,因此當您在測試中運行它時,它始終爲空。 – 2012-08-15 17:30:27

1

如果您有程序集名稱,則可以將其動態加載到當前AppDomain中以檢索版本信息。

Assembly.LoadFrom(string.Format("{0}.dll", "assemblyshortname")).GetName().Version