GetCustomAttribute() returns null for AssemblyVersionAttribute

前端 未结 3 1454
太阳男子
太阳男子 2021-01-07 17:42

I\'m adding an About dialog to my .NET application and I\'m querying the assembly\'s attributes for information to display. When I attempt to retrieve my assembly\'s Assembl

相关标签:
3条回答
  • 2021-01-07 18:31

    Your example is not a work-around. It's exactly what the MSDN documentation states you should do, which leads me to believe that code is by-design.
    http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

    To get the name [sic] of an assembly you have loaded, call GetName on the assembly to get an AssemblyName, and then get the Version property. To get the name of an assembly you have not loaded, call GetAssemblyName from your client application to check the assembly version that your application uses.

    0 讨论(0)
  • 2021-01-07 18:31

    Not sure why it behaves this way. Instead of going after the AssemblyVersionAttribute we do this:

    Version AssemblyVersion = someAssembly.GetName().Version;
    

    For AssemblyFileVersion we use:

    Version fileVersion = new Version("0.0.0.0");
    AssemblyFileVersionAttribute[] fileVersionAttributes = (AssemblyFileVersionAttribute[])assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true);
    if (fileVersionAttributes != null && fileVersionAttributes.Length > 0) {
        fileVersion = new Version(fileVersionAttributes[0].Version);
    }
    
    0 讨论(0)
  • 2021-01-07 18:34

    The AssemblyVersionAttribute is not added to the assembly, but is treated in a "special" way by the compiler (i.e. it sets the version of the assembly)

    You CAN get the AssemblyFileVersion attribute (i.e. this one is added to the assembly)

    There are other attributes that show the same behavior: the AssemblyCultureAttribute and AssemblyFlagsAttribute are also used for setting assembly properties, and are not added to the assembly as custom attributes.

    All of these attributes are listed under the Assembly Identity Attributes in the documentation. The documentation says this about these attributes:

    Three attributes, together with a strong name (if applicable), determine the identity of an assembly: name, version, and culture.

    0 讨论(0)
提交回复
热议问题