简体   繁体   中英

how to get publish version?

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?

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?

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);
        }
    }
}
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;
}

将C#6.0与Lambda表达式一起使用

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

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