我正在尝试“修复”我们的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文件代码有问题吗?
答案 0 :(得分:4)
我已经看到了一些关于如何将CustomizableOutDir属性传递给msbuild以获得解决方案的建议。
<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文件中每个OutputPath的条件相结合,而不是AfterCompile Target。例如。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath Condition=" '$(TeamBuildOutDir)'=='' ">bin\debug\</OutputPath>
<OutputPath Condition=" '$(TeamBuildOUtDir)'!='' ">$(TeamBuildOutDir)projectName</OutputPath>
</PropertyGroup>