关于c#:我如何获得汇编文件版本

How can I get the assembly file version

AssemblyInfo中,有两种组件版本:

  • AssemblyVersion:指定所属程序集的版本。
  • AssemblyFileVersion:指示编译器为win32文件版本资源使用特定的版本号。Win32文件版本不需要与程序集的版本号相同。
  • 我可以用以下代码行获得Assembly Version

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

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


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

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


    有三个版本:程序集、文件和产品。它们由不同的特性使用,如果不显式地指定它们,它们将采用不同的默认值。

    1
    2
    3
    4
    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;


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

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


    更新:正如Richard Grimes在我的引文@iain和@dmitry lobanov中提到的,我的回答理论上是正确的,但实际上是错误的。

    正如我应该从无数的书中记起的那样,当一个人使用[assembly: XXXAttribute]设置这些属性时,编译器会将它们高举并放入VERSIONINFO资源中。

    基于以上原因,您需要在@xiaofu的答案中使用该方法,因为在从属性中提取信号后,属性将被剥离。

    1
    2
    3
    4
    5
    6
    7
    8
    public static string GetProductVersion()
    {
      var attribute = (AssemblyVersionAttribute)Assembly
        .GetExecutingAssembly()
        .GetCustomAttributes( typeof(AssemblyVersionAttribute), true )
        .Single();
       return attribute.InformationalVersion;
    }

    (来自http://bytes.com/groups/net/420417-assemblyversionattribute-如前所述,如果要查找其他属性,请将其替换为上述属性)


    使用此:

    1
    2
    3
    4
    ((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
        Assembly.GetExecutingAssembly(),
        typeof(AssemblyFileVersionAttribute), false)
    ).Version;

    或者这个:

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


    您可以使用My.Application.Info.Version获得汇编版本。