6

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

根目录->

   WebApplicationProject1.csproj
   WebApplicationProject2.csproj
   ...

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

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

但是,MSBuild 不会保留此文件夹中的现有内容,并且每个项目都会删除此文件夹中的内容。最后建造的项目是赢家。

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

感谢您提供有关此问题的任何信息。

4

4 回答 4

1

您需要告诉 MSBuild 您的多个目标

尝试

<Target Name="Build" DependsOnTargets="T1, T2">
</Target>

MSBuild 允许您定义默认目标,并允许您定义目标之间的依赖关系。如果没有定义默认值,那么它会运行它找到的第一个。使用 DefaultTargets 你可以调用多个:

<Project DefaultTargets="T1;T2">

目标应该完成所有一个明确定义的步骤。例如,清理目标将删除清理项目所需的所有必要文件和文件夹。编译将编译所有 DLL 等。

您的目标通常应该声明自己的依赖项:

<Target Name="CI" DependsOnTargets="T1, T2">
</Target>

否则,您的目标应包含您要运行的所有单个步骤:

<Target Name="XX">
    <CallTarget Targets="T1"/>
    <CallTarget Targets="T2"/>
</Target>

如果您仍然感到困惑,请查看此链接

于 2011-01-06T21:58:51.917 回答
1

您不必创建多个构建配置。只需定义一个包含两个项目的解决方案,为此解决方案创建一个构建定义并添加一个 AfterDropBuild 目标,该目标将所有内容从 PublishedWebservices 输出子文件夹复制到一个公共文件夹。

于 2011-01-04T15:31:51.237 回答
0

这似乎正是微软想要的方式。我发现在 VS2008 中也是如此。构建项目会清除整个文件夹,包括 .svn。

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

于 2011-01-04T18:06:05.693 回答
0

您可以将它们全部构建到单独的文件夹中,然后将所有结果复制到最终文件夹中。如果文件具有相同的名称,它可能会搞砸,但如果你可以直接将它们全部构建到一个文件夹中,那就是这样了。

于 2010-12-29T20:48:48.610 回答