我如何获得程序集文件版本

AssemblyInfo有两个汇编版本:

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

我可以用下面的代码行得到Assembly Version

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

但是我怎样才能得到Assembly File Version

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

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

有三个版本 : 程序集文件产品 。 它们被不同的function使用,如果不明确地指定它们,则会采用不同的默认值。

 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; 

当我想要访问应用程序文件版本(在Assembly Information – > File version中设置了什么)时,说在表单加载中设置标签的文本以显示版本,我刚刚使用过

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

更新:正如理查德·格里姆斯在我引用的文章中提到的 ,@Iain和@Dmitry Lobanov,我的答案在理论上是正确的,但在实践中是错误的。

正如我应该从无数书籍等中记住的,当使用[assembly: XXXAttribute]设置这些属性时,它们被编译器劫持并放入VERSIONINFO资源。

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


公共静态stringGetProductVersion()
 {
   var属性=(AssemblyVersionAttribute)程序集
     .GetExecutingAssembly()
     .GetCustomAttributes(typeof(AssemblyVersionAttribute),true)
     。单();
   返回属性.InformationalVersion;
 }

(来自http://bytes.com/groups/net/420417-assemblyversionattribute – 如上所述,如果你正在寻找一个不同的属性,用上面的代替)

用这个:

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

或这个:

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

您可以使用My.Application.Info.Version获取程序集版本