我正在尝试“修复”我们的TF服务器上的构建,该构建将所有内容拖放到一个大的平面放置中的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似乎到of中,所有MyProj1的输出都已转储到其中(MyProj1可以按我希望的那样工作)。最重要的是,drop文件夹中的所有其他内容仍然都被丢弃到一个大的drop中(目录包含该drop的副本)。

有谁知道会导致CustomizableOutDir表现不正常的任何想法?还是我的csproj文件代码有问题?

最佳答案

我已经看到了一些有关如何将CustomizableOutDir属性传递给msbuild的建议。


正如您在问题中提供的那样,为SolutionToBuild项目添加<Properties>CustomizableOutDir=true</Properties>。 (What's the best way to get TFS to output each project to its own directory?
<CustomizableOutDir>true</CustomizableOutDir>添加到主PropertyGroup(TFS Build 2008 - Custom output directories
/p:CustomizableOutDir=true添加到TFSBuild.rsp(TFS Build 2008 - Custom output directories


我已经尝试了所有三种方法,最后一个选项(TFSBuild.rsp命令行选项)是我可以使用的唯一方法。我将此与csproj文件而不是AfterCompile Target中每个OutputPath的条件结合在一起。例如。

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

08-16 00:46