Страницы

четверг, 13 октября 2011 г.

Оседлать AssemblyVersion.

   Наверно перед каждым разработчиком встаёт задача управлением версиями сборок. На заре своей карьеры я делал это самым простым способом - переписывал руками. Потом этот процесс был автоматизирован с nant'ом: он сканировал AssemblyInfo.cs по всему решению, и переписывал версию. Потом через подключение через ссылку общего для всех проектов файла SolutionVersion.cs.
  Но в этом решении по прежнему оставался один минус: версия сборки имеет значение только в момент компиляции проекта, и ее нахождение в системе контроля версий бессмысленно. Но если не класть SolutionVersion.cs в контроль версий, то в новой рабочей копии сначала придётся запустить сборку приложения, чтобы его сгенерировать. Иначе студия будет сообщать нам об ошибке. К счастью, решение есть. И оно не такое уж сложное. Давайте по шагам.
  1. Создаём в корневой папке решения пустой файл SolutionVersion.cs
  2. Подключаем его во все проекты как ссылку.

  3. Добавляем его в список файлов, которые не будут отслеживаться системой контроля версий (файлы .gitignore; .hgignore).
  4. Откройте любым редактором файл проекта .csproj, и ищите в самом конце такие строки:
     
      <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
           Other similar extension points exist, see Microsoft.Common.targets.
      <Target Name="BeforeBuild">
      </Target>
      <Target Name="AfterBuild">
      </Target>
      -->
    
    Если есть - удаляем комментарии, и пишем свою задачу. Если их нет, то просто допишите pre-build задачу перед закрывающим тегом </Project>
     
      <Target Name="BeforeBuild">
        <Exec Command="echo //DO NOT EDIT &gt; $(SolutionDir)\SolutionVersion.cs"  condition="!Exists('$(SolutionDir)\SolutionVersion.cs')">
        </Exec>
      </Target>
    
  5. И настроим в своём любимом build-tool генерацию этого же файла.
  Собственно, идеальный результат достигнут: версия сборки не хранится в контроле версий, и нам не надо предварительно запускать build, чтобы visual studio не выдавала ошибок.

Комментариев нет:

Отправить комментарий