我正在尝试“修复”我们的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>