Динамическое управление версиями
У меня есть ситуация, когда я хочу, чтобы управление версиями было динамическим во время сборки.
Версия шаблона: <year>.<month>.<day>.<hhmm>
Но я прочитал, где значение String, используемое в атрибуте, анализируется во время компиляции.
Любой совет, как завершить это динамическое управление версиями?
Идеальная ситуация:
<Assembly: AssemblyVersion("4.0.0.0")>
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))>
Я знаю, что это не сработает, но я должен понять суть.
1 ответ
Вы можете использовать MsbuildCommunityTasks, чтобы сгенерировать номер сборки и настроить версию файла сборки во время перед сборкой.
Загрузите почтовый индекс в MsbuildCommunityTasks
Распакуйте в папку [SolutionFolder]\MsBuildExtensions\MSBuildCommunityTasks
Добавьте приведенный ниже пример в свой проект (csproj) сразу после импорта Microsoft.CSharp.Targets.
<PropertyGroup>
<MSBuildCommunityTasksPath>$(MSBuildThisFileDirectory)..\MsBuildExtensions\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
<My-PropertiesDir>Properties</My-PropertiesDir>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>
<Target Name="BeforeBuild">
<Time Format="yyyy.MM.dd.HHmm">
<Output TaskParameter="FormattedTime" PropertyName="My-VersionNumber" />
</Time>
<Message Text="Building $(My-VersionNumber) ...">
</Message>
<ItemGroup>
<My-AssemblyInfo Include="$(My-PropertiesDir)\AssemblyVersionInfo.cs" />
<Compile Include="@(My-AssemblyInfo)" />
</ItemGroup>
<MakeDir Directories="$(My-PropertiesDir)" />
<AssemblyInfo OutputFile="@(My-AssemblyInfo)"
CodeLanguage="CS"
AssemblyFileVersion="$(My-VersionNumber)"
AssemblyInformationalVersion="$(My-VersionNumber)"
Condition="$(My-VersionNumber) != '' "
/>
</Target>
<Target Name="AfterBuild">
<Delete Files="@(My-AssemblyInfo)" />
</Target>
Протрите атрибут AssemblyFileVersion из вашего AssemblyInfo.cs. Он будет сгенерирован во время сборки.
При сборке вы увидите номер версии, напечатанный на консоли. Сгенерированный файл удаляется в цели AfterBuild, чтобы обеспечить чистоту исходного контроля.
BeforeBuild:
Сборка 2013.01.14.1016 ... Создан файл AssemblyInfo "Свойства \AssemblyVersionInfo.cs".
(...)
AfterBuild:
Удаление файла "Свойства \AssemblyVersionInfo.cs".
Если вы хотите сделать это для многих проектов с меньшим количеством кода сборки, вам нужно будет создать собственный скрипт сборки, чтобы завершить ваше решение.