Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to synchronise the publish version to the assembly version in a .NET ClickOnce application?

In my C# ClickOnce application, there is an auto-incremented publish version in the Project -> Properties -> Publish tab. I'd like to display that version in my menu Help -> About box, but the code I'm using apparently accesses the assembly Version, which is different.

The Assembly Version can be changed manually in the Project -> Properties -> Application -> Assembly Information dialog. So for now, every time before I publish I've been copying the publish version to the assembly version, so my dialog shows the current version of the application. There must be a better way to do this.

All I really want to do is have an accurate, auto-updated, code-accessible version number.

Here's the code I'm using to access the assembly version number:

public string AssemblyVersion {     get     {         return Assembly.GetExecutingAssembly().GetName().Version.ToString();     } } 

An alternative would be to find code that accesses the publish version.

like image 209
Randy Gamage Avatar asked Sep 28 '09 19:09

Randy Gamage


2 Answers

sylvanaar's last line looks like the way to go, in my experience; but with the caveat that it is only available to deployed versions of the application. For debugging purposes, you might want something like:

    static internal string GetVersion()     {         if (ApplicationDeployment.IsNetworkDeployed)         {             return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();         }          return "Debug";     } 
like image 177
Richard Dunlap Avatar answered Oct 02 '22 19:10

Richard Dunlap


I modified my .csproj file to update the assembly version. I created a configuration called "Public Release" for this, but it's not required to do that.

  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.        Other similar extension points exist, see Microsoft.Common.targets.   <Target Name="BeforeBuild">   </Target>   <Target Name="AfterBuild">   </Target>   -->   <PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">     <MSBuildCommunityTasksPath>$(SolutionDir)Tools\MSBuildCommunityTasks</MSBuildCommunityTasksPath>   </PropertyGroup>   <!-- Required Import to use MSBuild Community Tasks -->   <Import Project="$(SolutionDir)Tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="'$(BuildingInsideVisualStudio)' == 'true'" />   <Target Name="BeforeCompile" Condition="'$(BuildingInsideVisualStudio)|$(Configuration)' == 'true|PublicRelease'">     <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">       <Output TaskParameter="OutputVersion" PropertyName="AssemblyVersionToUse" />     </FormatVersion>     <AssemblyInfo CodeLanguage="CS" OutputFile="$(ProjectDir)Properties\VersionInfo.cs" AssemblyVersion="$(AssemblyVersionToUse)" AssemblyFileVersion="$(AssemblyVersionToUse)" />   </Target> 

The published version may be:

ApplicationDeployment.CurrentDeployment.CurrentVersion 
like image 22
sylvanaar Avatar answered Oct 02 '22 20:10

sylvanaar