813

其中AssemblyInfo有两个程序集版本:

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

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

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

但我怎样才能得到Assembly File Version

4

5 回答 5

935

请参阅我上面的评论,以澄清您真正想要的内容。希望就是这样:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
于 2009-05-26T08:26:47.110 回答
252

共有三个版本程序集文件产品。如果您没有明确指定它们,它们由不同的功能使用并采用不同的默认值。

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;
于 2009-10-22T08:51:44.977 回答
77

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

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

这种方法需要参考System.Windows.Forms.

于 2013-02-25T17:11:17.183 回答
28

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

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

由于上述原因,您需要使用@Xiaofu's answer中的方法,因为在从属性中提取信号后会剥离属性。


公共静态字符串 GetProductVersion()
{
  var 属性 = (AssemblyVersionAttribute)Assembly
    .GetExecutingAssembly()
    .GetCustomAttributes( typeof(AssemblyVersionAttribute), true )
    。单身的();
   返回属性。信息版本;
}

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

于 2009-05-26T08:24:48.627 回答
11

用这个:

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

或这个:

new Version(System.Windows.Forms.Application.ProductVersion);
于 2016-06-19T02:50:30.377 回答