Team Foundation Build在平面目录结构中删除

时间:2010-07-07 14:21:39

标签: visual-studio-2008 msbuild tfsbuild

我正在尝试“修复”我们的TF服务器上的一个构建,它将所有内容放入一个大的平面drop中的drop文件夹中(而不是像本地构建那样的单独项目转储),而且我得到了一个有点沮丧 - 我会说实话,说这是我第一次使用MSBuild,而且这种情况有点让我感到沮丧 - 这不是我从头开始配置的构建文件。

我在网上找到了很多解决方案,大多数都指向this blog,看起来不错。不幸的是,它似乎根本没有解决我的问题。

在TFSBuild.proj中,我有一堆代码如下:

<SolutionToBuild Include="$(BuildProjectFolderPath)/../../mySolution.sln">
 <Targets>SomeProject\Project</Targets>
  <Properties>
    CustomizableOutDir=true;
  </Properties>
</SolutionToBuild>

据我所知,CustomizableOutDir确实设置为true,据称应保留目录结构。我尝试按照博客中的说明编辑一些项目文件,如此......

<Target Name="AfterCompile" Condition="'$(TeamBuildOutDir)' != ''">
    <ItemGroup>
       <CompileOutputs Include="$(OutDir)\**\*" />
    </ItemGroup>
    <Copy 
      SourceFiles="@(CompileOutputs)"
      DestinationFolder=
      "$(TeamBuildOutDir)\ProjectName\%(RecursiveDir)" />
</Target>

但这表现得很奇怪 - 如果我编辑几个项目文件,我开始得到看起来,就像我可能正在接近一个正确的解决方案,但仍然不够好 - 我得到一个目录结构,包含像MyProj1和MyProj2这样的文件夹,但MyProj2似乎已将MyProj1的所有输出转储到其中(MyProj1正如我希望的那样工作)。除此之外,drop文件夹仍然将所有其他内容转储到一个大的drop中(这些目录包含此drop的重复项)。

有没有人知道可能导致CustomizableOutDir不按预期运行的原因?或者我的csproj文件代码有问题吗?

1 个答案:

答案 0 :(得分:4)

我已经看到了一些关于如何将CustomizableOutDir属性传递给msbuild以获得解决方案的建议。

  1. 正如您在问题中提供的那样,为SolutionToBuild项添加<Properties>CustomizableOutDir=true</Properties>。 (What's the best way to get TFS to output each project to its own directory?
  2. <CustomizableOutDir>true</CustomizableOutDir>添加到主PropertyGroup(TFS Build 2008 - Custom output directories
  3. /p:CustomizableOutDir=true添加到TFSBuild.rsp(TFS Build 2008 - Custom output directories
  4. 我已经尝试了所有这三种方法,最后一个选项(TFSBuild.rsp命令行选项)是我唯一可以使用的方法。我将它与csproj文件中每个OutputPath的条件相结合,而不是AfterCompile Target。例如。

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <OutputPath Condition=" '$(TeamBuildOutDir)'=='' ">bin\debug\</OutputPath>
        <OutputPath Condition=" '$(TeamBuildOUtDir)'!='' ">$(TeamBuildOutDir)projectName</OutputPath>
    </PropertyGroup> 
    
相关问题