How to update the Value in Assemblyinfo.cs dynamically How to update the Value in Assemblyinfo.cs dynamically wpf wpf

How to update the Value in Assemblyinfo.cs dynamically


I am assuming that you are trying to generate some build system here - so essentially, you need to modify AssemblyInfo.cs file with svn number.

You can create MS Build task for the same: see http://florent.clairambault.fr/insert-svn-version-and-build-number-in-your-c-assemblyinfo-file

There is command line utility (SubWCRev) that can also be used for keyword based replacement ($WCREV$ for revision) - see the example here: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev-example.html

Finally, you can probably roll out your custom code (doing regex search/replace) to do the same which some (including me) has done - see one such example here: http://www.codeproject.com/Articles/168528/Automatically-keep-Assembly-revisions-in-sync-with.


I'm using an ant based build system, and had a similar question about updating AssemblyInfo.cs.

My build system already generates version.h files that are included into other projects at build time. For C#, I decided to use the generated VersionInfo.cs for version info injection into AssemblyInfo.cs.

AssemblyInfo.cs (setup once specifying the VersionInfo constants)

using System.Reflection;using System.Runtime.InteropServices;[assembly: AssemblyCompany(VersionInfo.Company)][assembly: AssemblyProduct(VersionInfo.ProductName)][assembly: AssemblyCopyright(VersionInfo.Copyright)][assembly: Guid("12345678-1234-1234-1234-1234567890ab")][assembly: AssemblyVersion(VersionInfo.product.FileVersion)][assembly: AssemblyFileVersion(VersionInfo.sdk.FileVersion)]

VersionInfo.cs (dynamically generated by the ant build system)

// Shared Product Version Header// Automatically Generated: Sat, 2 May 2015 15:09:09 EDT// ReSharper disable CheckNamespace// ReSharper disable InconsistentNaminginternal struct VersionInfo{  public const string Company = @"My Company Corp";  public const string Copyright = @"Copyright (c) 2015 My Company Corp.  All rights reserved.";  public const string ProductName = @"My Software Service";  public const string SpecialBuild = @"";  public const string ProductConfiguration = @"";  public const string ProductCode = @"MSS";  public const string ProductUrl = @"www.MyCompany.com";  public const string ProductEmail = @"support@MyCompany.com";  public const string ProductVendor = @"My Company Corp";  internal struct product  {    public const string FileVersion = @"1.5.0.240";  }  internal struct sdk  {    public const string FileVersion = @"1.4.5.222";  }  internal struct service  {    public const string FileVersion = @"1.3.2.142";  }}

version.xml (ant import - snipped)

<echo file="${artifacts.dir}\VersionInfo.cs" append="false">// Shared Product Version Header${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">// Automatically Generated: ${version.generated.time}${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">// ReSharper disable CheckNamespace${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">// ReSharper disable InconsistentNaming${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">internal struct VersionInfo${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">{${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">  public const string Company = @"${product.company}";${line.separator}</echo><echo file="${artifacts.dir}\VersionInfo.cs" append="true">  public const string Copyright = @"${product.copyright}";${line.separator}</echo> <!-- other version info here --><echo file="${artifacts.dir}\VersionInfo.cs" append="true">}${line.separator}</echo>

version.properties (ant properties file specifying product version info)

product.company=My Company Corpproduct.copyright=Copyright (c) 2015 My Company Corp.  All rights reserved.product.website=www.MyCompany.comproduct.email=support@MyCompany.comproduct.vendor=My Company Corpproduct=1.5.0.240service=1.3.2.142sdk=1.4.5.222

C# pre-build event (copies auto-generated VersionInfo.cs to project Properties directory)

@ECHO OFFSETLOCALSET ARTDIR=$(ProjectDir)..\..\..\MySoftwareService\installerSET VERCS=%ARTDIR%\VersionInfo.csECHO Updating %VERCS%xcopy /D /Y "%VERCS%" "$(ProjectDir)Properties"

MSBuild Extensions (none!)

<!-- none, not required -->

BTW, my version scheme is: major.minor.revision.build which isn't what the AssemblyInfo.cs file specifies.


You'll need to do this during your build process.

Since you're using Visual Studio, you're already using MSBuild, in which case the MSBuild Extension Pack has an AssemblyInfo task.

For getting the revision from Subversion, the MSBuild Extension Pack has got a task for that as well.

Alternatively, if you're using TeamCity for continuous integration (CI), it has an "AssemblyInfo patcher" build feature. I guess that most other CI systems will have something similar.