【发布时间】:2010-01-25 20:13:30
【问题描述】:
我有一个 C# 解决方案,它引用了我从另一个 C# 解决方案创建的 dll。
使用 Application.ProductVersion 很容易确定我的解决方案的产品版本。但是,我真正需要的是在我的程序中分别确定 exe 和 dll 的文件版本的方法。我想在“关于”对话框中显示 dll 和 exe 的文件版本。执行此操作的代码是什么样的?
【问题讨论】:
我有一个 C# 解决方案,它引用了我从另一个 C# 解决方案创建的 dll。
使用 Application.ProductVersion 很容易确定我的解决方案的产品版本。但是,我真正需要的是在我的程序中分别确定 exe 和 dll 的文件版本的方法。我想在“关于”对话框中显示 dll 和 exe 的文件版本。执行此操作的代码是什么样的?
【问题讨论】:
最简单的方法是如果您知道所引用程序集中的类型:
AssemblyName name = typeof(MyCompany.MyLibrary.SomeType).Assembly.GetName();
Assembly.GetName 返回一个 AssemblyName,其中有一个 Version 属性,指示程序集的版本。
或者,您可以获取执行程序集(即 .exe)引用的所有程序集的程序集名称:
AssemblyName[] names = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
【讨论】:
也许最简单的解决方案是这样的:
var version = Assembly.GetAssembly(typeof(SomeType)).GetName().Version;
其中 SomeType 是您确定在该特定程序集中定义的类型。然后,您可以在此 version object 上调用 .ToString() 或查看其属性。
当然,当您将您的类型移动到另一个程序集时,它会爆炸成一个巨大的火球。如果这是可能的,您将需要一种更可靠的方法来查找程序集对象。如果是这种情况,请告诉我。
【讨论】:
AssemblyInfo 类包含所有这些信息,因此您只需在代码中获取对程序集的引用。例如:
Assembly.GetExecutingAssembly.GetName.Version.ToString()
您可以通过各种方式获取项目中的其他程序集,例如
var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
【讨论】: