2010-01-25 62 views
10

我有一個C#解決方案,它引用了我從不同的C#解決方案創建的dll。C#中確定引用的dll文件版本#

用Application.ProductVersion很容易確定我的解決方案的產品版本。但是,我真正需要的是在我的程序中分別確定exe文件和dll文件版本的方法。我想在「關於」對話框中顯示dll和exe的文件版本。代碼看起來像做什麼?

回答

18

最簡單的方法是,如果你知道在引用組件類型:

AssemblyName name = typeof(MyCompany.MyLibrary.SomeType).Assembly.GetName(); 

Assembly.GetName返回AssemblyName具有Version屬性指示組件的版本。

或者,你可以通過執行組件(即.exe文件)中引用的所有組件的組件名稱:

AssemblyName[] names = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); 
+0

感謝;我覺得在.NET中必須有一個簡單的方法,但我一直無法找到它。當我在尋找解決方案時,我認爲是什麼讓我感到遺憾的是GetName()...我甚至沒有看它,因爲我認爲它會返回一個字符串或其他東西。 – 2010-01-26 12:56:11

3

也許最簡單的解決辦法是這樣的:

var version = Assembly.GetAssembly(typeof(SomeType)).GetName().Version; 

哪裏SomeType是您確定知道的類型,它在該特定程序集中定義。然後,您可以在version object上調用.ToString()或查看其屬性。

當然,當你將你的類型移動到另一個程序集時,這將會在巨大的火球中爆炸。如果這是可能的話,您將需要更強大的方式來查找組件對象。讓我知道如果是這樣的話。

2

AssemblyInfo類擁有所有這些信息,所以您只需要在代碼中獲取對程序集的引用即可。例如:

Assembly.GetExecutingAssembly.GetName.Version.ToString() 

你可以以各種方式對項目的其他組件,例如

var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();