Получите сервер сборки TFS, чтобы получить файл stylecop.settings в корневой папке.

У нас есть несколько проектов TFS в одной коллекции.

В каждом проекте TFS есть несколько решений Visual Studio, где каждый файл sln находится в отдельной папке.

Каждый проект TFS имеет файлы StyleCop.settings для конкретного проекта в корне проекта TFS.

Однако, когда мы создаем сборку для каждого решения, сборка получает только папку, содержащую решение (согласно рекомендациям Microsoft, для повышения производительности сборки). Поэтому мы пропускаем файл StyleCop.settings в корне проекта TFS.

Поэтому мой вопрос:

Как я могу применить файл настроек к построению решения и соответствовать следующим критериям

  1. Все файлы StyleCop.settings должны храниться в системе управления версиями.
  2. Количество файлов StyleCop.settings должно быть минимальным (в идеале не более 1 на проект TFS).
  3. При сборке из TFS следует загружать только папку решения.
  4. Машину сборки и машины разработчика не нужно модифицировать с помощью переменных среды или чего-то подобного.
  5. Каждое решение состоит из нескольких проектов VS (т. е. нескольких файлов *.csproj).

Приложение 1. Структура папок

Для справки/ясности, вот пример структуры папок, которую я описал выше. Сборка TFS извлекает только папку Application1 или Application2 (в зависимости от того, какое приложение она создает).

C:\Source\
  TfsProject1\
    stylecop.settings
    Application1\
      Application1.sln
    Application2\
      Application2.sln

Приложение 2. StyleCop NuGet

Просто отметим, что мы используем пакет NuGet StyleCop.MsBuild для интеграции StyleCop в TFS. он не устанавливается непосредственно на каждую машину, поэтому любое решение, основанное на нем, отсутствует :)


person RB.    schedule 22.08.2013    source источник


Ответы (2)


В XAML-файле шаблона сборки отредактируйте и добавьте новое действие «Загрузить файл». В этом упражнении укажите исходное местоположение в качестве местоположения сервера stylecop и место назначения в качестве вашего «исходного каталога» или того места, где вы хотите его разместить. Это обеспечит загрузку файла во время каждой сборки независимо от того, какое решение.

Для этой цели вам не нужно поддерживать дополнительные файлы msbuild.

person Isaiah4110    schedule 23.08.2013
comment
Наконец-то получив возможность разобраться с Build WorkFlow, я согласен, что это лучший подход. Ваше здоровье :) - person RB.; 03.09.2013

Подход, который я в конце концов придумал, заключался в том, чтобы определить новый файл MSBuild для каждого решения (и добавленный как элемент решения), который будет использоваться исключительно для сервера сборки CI. Это определяет цель, которая имеет 2 задания:

  1. Получите файл StyleCop
  2. Запустите обычную сборку.

И это выглядит так (это включает в себя цель CI и цель Release — очевидно, у вас может быть столько целей, сколько разумно для вашего подхода).

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TF>"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\ide\tf.exe"</TF>
    <TFFile>$/Project1/Settings.StyleCop</TFFile>
    <OutputFile>.\StyleCop.Settings</OutputFile>
    <TFCollection>http://mytfsserver:8080/tfs/DefaultCollection</TFCollection>
  </PropertyGroup>

  <Target Name="CI" DependsOnTargets="DownloadStyleCopSettings">
    <!-- This target is intended for a Continuous integration build -->
    <MSBuild Projects="Application1.sln" Properties="Configuration=Debug">
    </MSBuild>
  </Target>
  <Target Name="Release" DependsOnTargets="DownloadStyleCopSettings">
    <!-- This target is intended for a Release build.
         It produces a Release (not Debug) build, and will increment Version numbers. 
     -->
  </Target>

  <!-- This target downloads the StyleCop settings file from the TFS Project root. -->
  <Target Name="DownloadStyleCopSettings">
    <Exec Command="$(TF) view /collection:$(TFCollection) $(TFFile) /noprompt /output:$(OutputFile)" />
  </Target>
</Project>
person RB.    schedule 22.08.2013