如何获取程序集文件版本

AssemblyInfo中,有两个汇编版本:

  1. AssemblyVersion:指定要归因的程序集的版本。
  2. AssemblyFileVersion:指示编译器为Win32文件版本资源使用特定版本号。Win32文件版本不需要与程序集的版本号相同。

我可以使用以下代码行获取Assembly Version

Version version = Assembly.GetEntryAssembly().GetName().Version;

但是我怎么能得到Assembly File Version呢?

555403 次浏览

更新:正如Richard Grimes在我引用的帖子中提到的,@Iain和@Dmitry Lobanov,我的答案在理论上是正确的,但在实践中是错误的。

正如我应该从无数的书籍中记住的那样,当一个人使用[assembly: XXXAttribute]它们被编译器劫持并放置在#1资源中设置这些属性时。

由于上述原因,您需要使用@小福的回答中的方法,因为在从属性中提取信号后,属性将被剥离。


public static string GetProductVersion(){var attribute = (AssemblyVersionAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes( typeof(AssemblyVersionAttribute), true ).Single();return attribute.InformationalVersion;}

(从http://bytes.com/groups/net/420417-assemblyversionattribute开始-如上所述,如果您正在寻找不同的属性,请将其替换为上面的属性)

看看我上面的评论,要求澄清你真正想要的是什么。希望这是:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);string version = fvi.FileVersion;

三个版本组装文件产品。它们被不同的功能使用,如果您不明确指定它们,则采用不同的默认值。

string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();string assemblyVersion = Assembly.LoadFile("your assembly file").GetName().Version.ToString();string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;

当我想访问应用程序文件版本(在程序集信息->文件版本中设置)时,说在表单加载时设置标签的文本以显示版本,我刚刚使用

versionlabel.Text = "Version " + Application.ProductVersion;

这种方法需要引用System.Windows.Forms

使用这个:

((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),typeof(AssemblyFileVersionAttribute), false)).Version;

或者这个:

new Version(System.Windows.Forms.Application.ProductVersion);