Динамическое управление версиями

У меня есть ситуация, когда я хочу, чтобы управление версиями было динамическим во время сборки.

Версия шаблона: <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".

  • Если вы хотите сделать это для многих проектов с меньшим количеством кода сборки, вам нужно будет создать собственный скрипт сборки, чтобы завершить ваше решение.

Другие вопросы по тегам