0

我们在一个集合中有许多 TFS 项目。

每个 TFS 项目都有许多 Visual Studio 解决方案,每个 sln 文件都在它自己的文件夹中。

每个 TFS 项目在 TFS 项目的根目录中都有一个项目特定的 StyleCop.settings 文件。

但是,当我们为每个解决方案创建构建时,我们获取构建只获取包含解决方案的文件夹(按照 Microsoft 的建议,以提高构建性能)。因此,我们错过了 TFS 项目根目录中的 StyleCop.settings 文件。

因此,我的问题是:

如何将我的设置文件应用于解决方案的构建,并满足以下条件

  1. 所有 StyleCop.settings 文件都必须存储在源代码管理中。
  2. StyleCop.settings 文件的数量必须保持在最低限度(理想情况下,每个 TFS 项目不超过 1 个)。
  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 中 - 它不是直接安装在每台机器上,因此任何依赖它的解决方案都已淘汰 :)

4

2 回答 2

1

在您的构建模板 Xaml 文件中,编辑并添加一个新的“下载文件”活动。在此活动中,将源位置作为 stylecop 服务器位置,将目标作为您的“源目录”或您想要的位置。这将确保在每次构建期间下载文件,无论使用哪种解决方案。

您不必为此维护额外的 msbuild 文件。

于 2013-08-23T05:19:53.790 回答
0

我最终想出的方法是为每个解决方案(并作为解决方案项添加)定义一个新的 MSBuild 文件,仅用于 CI 构建服务器。这定义了一个有 2 个工作的目标:

  1. 获取 StyleCop 文件
  2. 运行正常的构建。

它看起来像这样(这个包括一个 CI 目标和一个发布目标 - 显然,您可以拥有尽可能多的目标,因为您的方法是明智的)。

<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>
于 2013-08-22T14:36:09.217 回答