简体   繁体   中英

How can I make the AssemblyInfo version of a C# .NET CF program propagate to the Explorer Properties window?

It seems like if you compile a Visual Studio solution and have a version # in your AssemblyInfo.cs file, that should propagate to say, the Windows Explorer properties dialog. This way, someone could simply right click on the *.exe and click 'properties' to see the version #. Is there a special setting in Visual Studio to make this happen?

example picture http://content.screencast.com/users/Pincas/folders/Jing/media/40442efd-6d74-4d8a-8e77-c1e725e6c150/2008-09-24_0849.png

Edit: I should have mentioned that this is, specifically, for .NET Compact Framework 2.0, which doesn't support AssemblyFileVersion. Is all hope lost?

Note, that the AssemblyFileVersion attribute is not available under .NET Compact Framework !

See this article from Daniel Mooth for a workaround.

AssemblyFileVersion属性是否有帮助?

You need to add another attribute:

[assembly: AssemblyFileVersion("1.0.114.0")]

Note that you still need the AssemblyVerison one as well to correctly identify the assembly to the .NET runtime.

The version number does propagate through to the "Version" tab in the properties dialogue but not through to the summary. Unfortunately VS will not auto-populate the summary information of a file as the information is meta-data attached to the file itself. You can however access and manipulate the summary information yourself by using the free DSO OleDocument Properties Reader from Microsoft.

You can acquire the library from: http://www.microsoft.com/downloads/details.aspx?FamilyId=9BA6FAC6-520B-4A0A-878A-53EC8300C4C2&displaylang=en

Further information on its use can be found at: http://www.developerfusion.co.uk/show/5093/

EDIT : As noted above by pb and Nigel Hawkins you can get the property to propogate by using the AssemblyFileVersion attribute like:

[assembly: AssemblyFileVersion("1.0.114.0")]

I'm not sure that RevisionNumber is the correct field to be looking for.

Try explorer, right click -> version tab, and look at the AssemblyVersion field there.

in my project we use FileVersion = YYYY.MM.DD.BUILD (eg, 2008.9.24.1) but the ProductVersion should be major.minor.revision.BUILD. we use the AssemblyInformationalVersion to get around this.

AssemblyVersion="MAJ.MIN.REV.1" --> used by .NET

AssemblyInformationalVersion="MAJ.MIN.REV.XXX" --> used in explorer's ProductVersion

AssemblyFileVersion="YYYY.MM.DD.XXX" --> used in explorer's FileVersion

NOTE: This answer is for accessing the AssemblyInfo properties within a .NET CF 3.5 application. It does not propagate to the executable's "Properties" inside of Windows Explorer (but could be used to write to a file, to the console, or to display in the application)

I know this is a very old question, but here is a solution I found using Reflection and Linq to get the "AssemblyInformationalVersion" (product version in newer Visual Studio projects).

First, I added this to the AssemblyInfo.cs (replace the string with whatever you want to use):

[assembly: AssemblyInformationalVersion("1.0.0.0 Alpha")]

Then, you can use this method to pull out the attribute (I placed it inside a static class in the AssemblyInfo.cs file). The method get's an array of all Assembly attributes, then selects the first result matching the attribute name (and casts it to the proper type). The InformationalVersion string can then be accessed.

//using System.Reflection;
//using System.Linq;
public static string AssemblyInformationalVersion
{
    get
    {
        AssemblyInformationalVersionAttribute informationalVersion = (AssemblyInformationalVersionAttribute) 
            (AssemblyInformationalVersionAttribute.GetCustomAttributes(Assembly.GetExecutingAssembly())).Where( 
                at => at.GetType().Name == "AssemblyInformationalVersionAttribute").First();

        return informationalVersion.InformationalVersion;
    }
}

To get the normal "AssemblyVersion" attribute I used:

//using System.Reflection;
public static string AssemblyVersion
{
    get
    {
        return Assembly.GetExecutingAssembly().GetName().Version.ToString();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM