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

如何确保msbuild文件中的目标只被调用一次?,msbuild,Msbuild,我们有一个MsBuild.proj文件,其中包含以下部分(简化): 但是,我们看到InstallValues部分被多次调用,因此该文件被创建了几次,并且在不同的位置上。。。显然,当构建被编译两到三次而不是只编译一次时,这很烦人,但并不是很关键(只是速度慢了一点),但是对于这个Installvalues文件,我们真的不需要它的多个实例 那么,一个目标可以被多次调用吗?可能是由编译从属程序集引起的?如果能对这种奇怪的现象有所了解,我们将不胜感激。一般来说,除非编辑:即使您,MSBuild也不会在给定

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

但是,我们看到InstallValues部分被多次调用,因此该文件被创建了几次,并且在不同的位置上。。。显然,当构建被编译两到三次而不是只编译一次时,这很烦人,但并不是很关键(只是速度慢了一点),但是对于这个Installvalues文件,我们真的不需要它的多个实例

那么,一个目标可以被多次调用吗?可能是由编译从属程序集引起的?如果能对这种奇怪的现象有所了解,我们将不胜感激。

一般来说,除非编辑:即使您
,MSBuild也不会在给定的构建顶级调用中多次运行目标,即使您在依赖项中有重复项(顺序很重要,但一旦完成,就完成了)

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


但事实是在日志中[您似乎非常努力地创建!]

是的,问题很可能是调用嵌套。我认为从头开始重新构建可能会更好。但是感谢您将我引向日志,请始终首先检查明显的解决方案:)MSBuild不会多次调用目标,即使使用
。实现这一点的唯一方法是使用任务指定不同的属性。@Dmitry Lobanov:更正@山姆:对不起,误传了
<Target Name="WEB" DependsOnTargets="CleanResults;UpdateAssemblyInfo;Services;Business">

    <!-- Other build and release stuff -->      
            <MSBuild Projects="$(CreateInstallValuesScriptProjectFile)" Properties="DatabaseStructureLocation=$(DatabaseDirectory)\Sandbox\002.Structure" />
        </Target>
MSBuild msbuild.proj /m /t:WEB /p:Configuration=Release;DoRelease=true;DoSandBox=false;DoWix=false /fileLoggerParameters:LogFile=msbuild.log;Verbosity=normal;Encoding=UTF-8