how to get publish version?

2020-07-07 07:52发布

问题:

I would like to show the publish version of my desktop application. I am trying to do it with this code:

_appVersion.Content = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

The problem is that I am not getting exactly the publish version I have in my project properties. Below is a screenshot of it:

But I am getting 3.0.0.12546. Does someone know where is the problem?

回答1:

I was also having this issue and found that the version number set in AssemblyInfo.cs was interfering with the one set in Properties:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

I usually comment those lines out of AssemblyInfo and replace them with

[assembly: AssemblyVersion("1.0.*")]

Check whether these values have been hard-coded into your AssemblyInfo file.

See this SO question for an interesting discussion on automatic versioning. When checking AssemblyInfo.cs, make sure your auto-increment (* - if you are using it) only targets AssemblyVersion and not AssemblyFileVersion.


When debugging the program, you could check the properties of the assembly in

\bin\Release\app.publish

Under the Details tab, check the version number. Does this match up with any of the settings you specified in VS?



回答2:

We can create one property which will return the Version information as mention below and we can use that property.

public string VersionLabel
{
    get
    {
        if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
        {
            Version ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
            return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name);
        }
        else
        {
            var ver = Assembly.GetExecutingAssembly().GetName().Version;
            return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name);
        }
    }
}


回答3:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

will get you the assembly version that exist in the AssemblyInfo.cs file, to get the publish version that you set in the publish dialog, you should use

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion

But notice that you have to add reference to System.Deployment, and it will work only after you publish your application by right click on the project file and click publish, everytime you publish, it will increment the Revision.

If you tried to call the above line in debug mode it will not work and will throw an exception, so you can use the following code:

try
{
    return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
}
catch(Exception ex)
{
    return Assembly.GetExecutingAssembly().GetName().Version;
}


回答4:

Using C# 6.0 with Lambda expression

private string GetVersion => ApplicationDeployment.IsNetworkDeployed ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" : $"Version: {Application.ProductVersion}";