我正在使用TFS 2010运行自动构建。在一个解决方案中,我有多个Web应用程序,它们都位于相同的根目录下 - 例如:
RootDir - >
WebApplicationProject1.csproj
WebApplicationProject2.csproj
...
当我运行自动构建时,我为MSBuild设置了以下参数:
/ p:DeployOnBuild = true; DeployTarget = PipelinePreDeployCopyAllFilesToOneFolder; _PackageTempDir =“\ computer \ Builds \ Published”/ p:SkipExtraFilesOnServer = true
但是,MSBuild不会保留此文件夹中的现有内容,并且每个项目都会删除此文件夹中的内容。最后一个项目是获胜者。
我可以让MSBuild不删除此文件夹中的内容并仅替换现有文件吗?
感谢有关此事的任何信息。
答案 0 :(得分:1)
您不必创建多个构建配置。 只需定义包含两个项目的解决方案,为此解决方案创建构建定义,并添加一个AfterDropBuild目标,该目标将PublishedWebservices输出子文件夹中的所有内容复制到公共文件夹。
答案 1 :(得分:1)
您需要告诉MSBuild您的多个目标
尝试
<Target Name="Build" DependsOnTargets="T1, T2">
</Target>
MSBuild允许您定义默认目标,它允许您定义目标之间的依赖关系。如果没有定义默认值,则它会运行它找到的第一个默认值。使用DefaultTargets可以调用多个:
<Project DefaultTargets="T1;T2">
目标应该完成一个明确定义的步骤。例如,Clean目标将删除清理项目所需的所有必要文件和文件夹。编译将编译所有DLL等。
您的目标通常应声明自己的依赖项:
<Target Name="CI" DependsOnTargets="T1, T2">
</Target>
否则,您的目标应包含您要运行的所有单个步骤:
<Target Name="XX">
<CallTarget Targets="T1"/>
<CallTarget Targets="T2"/>
</Target>
如果您仍然面临困惑,请查看此link
答案 2 :(得分:0)
您可以将它们全部构建为单独的文件夹,然后将所有结果复制到最终文件夹中。如果文件具有相同的名称,它可能会搞砸,但如果您可以将它们全部直接构建到一个文件夹中,那就是这样。
答案 3 :(得分:0)
这似乎只是微软想要它的方式。我在VS2008中发现了同样的事情。构建项目会消灭整个文件夹,包括.svn。
我的解决方案是创建一个构建后事件,将每个位置的文件复制到一个公共文件夹中。它并不理想,但它确实有效,没有发现任何重大的挂断。