Найденный на просторах интернета 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-версии, будет увеличиваться номер сборки.