Автоматическое обновление версии сборки в Visual Studio

Найденный на просторах интернета AutoBuildVersion в моей VS2010 запускаться совершенно не захотел, вылетая с ошибкой 80070057.  Дальнейшие поиски принесли скрипт, который менял версию в файле AssemblyInfo.cs, но была проблема – для запуска нужно было указывать разные параметры для каждой из конфигураций (Debug/Release).

Пара небольших изменений и всё стало работать… Итак…

Командная строка события перед построением:

"%CommonProgramFiles(x86)%microsoft sharedTextTemplating10.0TextTransform.exe" -a !!$(ConfigurationName)!1 "$(ProjectDir)PropertiesAssemblyInfo.tt"

Сам скрипт:

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Windows.Forms" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#
    int incRevision = 1;
    int incBuild = 1;

    try { incRevision = Convert.ToInt32(this.Host.ResolveParameterValue("","","Debug"));} catch( Exception ) { incBuild=0; }
    try { incBuild = Convert.ToInt32(this.Host.ResolveParameterValue("","","Release")); } catch( Exception ) { incRevision=0; }
    try {
        string currentDirectory = Path.GetDirectoryName(Host.TemplateFile);
        string assemblyInfo = File.ReadAllText(Path.Combine(currentDirectory,"AssemblyInfo.cs"));
        Regex pattern = new Regex("AssemblyVersion\("\d+\.\d+\.(?\d+)\.(?\d+)"\)");
        MatchCollection matches = pattern.Matches(assemblyInfo);
        revision = Convert.ToInt32(matches[0].Groups["revision"].Value) + incRevision;
        build = Convert.ToInt32(matches[0].Groups["build"].Value) + incBuild;
    }
    catch( Exception ) { }
#>
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("J2H engine. Keys: F2 (Debug trace), F4 (Fullscreen), Shift+Arrows (Move view). ")]
[assembly: AssemblyProduct("journey engine")]
[assembly: AssemblyDescription("My engine for j2h")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyCopyright("Copyright © Dmitry 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type. Only Windows
// assemblies support COM.
[assembly: ComVisible(false)]

// On Windows, the following GUID is for the ID of the typelib if this
// project is exposed to COM. On other platforms, it unique identifies the
// title storage container when deploying this assembly to the device.
[assembly: Guid("3c5c660e-2664-4ad2-909d-fe0b29e72be1")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
[assembly: AssemblyVersion("0.1.<#= this.revision #>.<#= this.build #>")]
[assembly: AssemblyFileVersion("0.1.<#= this.revision #>.<#= this.build #>")]

<#+
    int revision = 0;
    int build = 0;
#>

Скрипт помещается в файл AssemblyInfo.tt и заносится в Properties проекта, вместе с файлом AssemblyInfo.cs
Теперь при каждой сборке Debug-версии будет увеличиваться номер ревизии, а при каждой сборке Release-версии, будет увеличиваться номер сборки.

Leave a Reply

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.