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;
}
Using C# 6.0 with Lambda expression
private string GetVersion => ApplicationDeployment.IsNetworkDeployed ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" : $"Version: {Application.ProductVersion}";