如何告诉MSBuild将许多Web项目发布到一个目录中?

时间:2010-12-22 11:38:31

标签: tfs2010 msbuild-4.0

我正在使用TFS 2010运行自动构建。在一个解决方案中,我有多个Web应用程序,它们都位于相同的根目录下 - 例如:

RootDir - >

   WebApplicationProject1.csproj
   WebApplicationProject2.csproj
   ...

当我运行自动构建时,我为MSBuild设置了以下参数:

/ p:DeployOnBuild = true; DeployTarget = PipelinePreDeployCopyAllFilesToOneFolder; _PackageTempDir =“\ computer \ Builds \ Published”/ p:SkipExtraFilesOnServer = true

但是,MSBuild不会保留此文件夹中的现有内容,并且每个项目都会删除此文件夹中的内容。最后一个项目是获胜者。

我可以让MSBuild不删除此文件夹中的内容并仅替换现有文件吗?

感谢有关此事的任何信息。

4 个答案:

答案 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。

我的解决方案是创建一个构建后事件,将每个位置的文件复制到一个公共文件夹中。它并不理想,但它确实有效,没有发现任何重大的挂断。