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