如何确保只调用一次msbuild文件中的目标?

时间:2010-09-03 13:25:39

标签: msbuild

我们有一个MsBuild.proj文件,其中包含以下部分(简化):

<Target Name="WEB" DependsOnTargets="CleanResults;UpdateAssemblyInfo;Services;Business">

    <!-- Other build and release stuff -->      
            <MSBuild Projects="$(CreateInstallValuesScriptProjectFile)" Properties="DatabaseStructureLocation=$(DatabaseDirectory)\Sandbox\002.Structure" />
        </Target>

基本上,InstallValuesScript在我们的数据库目录中生成一个.sql文件,该文件将更新我们在数据库中的应用程序版本。相当简单。

构建被称为:

MSBuild msbuild.proj /m /t:WEB /p:Configuration=Release;DoRelease=true;DoSandBox=false;DoWix=false /fileLoggerParameters:LogFile=msbuild.log;Verbosity=normal;Encoding=UTF-8

然而,我们看到的是InstallValues部分被多次调用,因此这个文件被创建了几次,并且在不同的位置...显然当构建编译两到三次时而不是只有一次,那令人讨厌,但并不是真正的关键(只是稍慢),但是对于这个Installvalues文件,我们真的不想要它的多个实例。

那么是什么,可以多次调用目标?可能是由编译依赖程序集引起的?关于这个奇怪的现象的一些亮点将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

一般情况下,除非编辑:即使您<CallTask>,MSBuild也不会在给定的构建顶层调用中多次运行Target,甚至< / em>如果你在依赖项中有重复项(顺序很重要,但一旦完成,它就完成了)。

您是否对项目文件进行了一些调用,这些文件以某种复杂的方式链接?

但是真相在日志中[你似乎正在如此刻苦地创造!]