错误MSB4006:涉及目标的目标依赖关系图中存在循环依赖关系

时间:2014-04-08 09:45:19

标签: c# visual-studio-2012 msbuild build-process

我使用VS2012在csproj文件上有以下目标,我想运行"发布"一旦构建完成,就在项目上。

这给了我以下错误"错误MSB4006:目标依赖图中存在循环依赖,涉及目标" AfterBuild""

<Target Name="AfterBuild">
  <Message Text="Running Publish..." Importance="high"/>
  <MSBuild Projects="$(ProjectPath)" Properties="DeployOnBuild=true;PublishProfile=WebDeploy;CreatePackageOnPublish=True;VisualStudioVersion=11.0"/>
</Target>

我尝试用

替换MSBuild步骤
<Exec Command="$(MSBuildBinPath)\MSBuild C:\MyProj.csproj /p:DeployOnBuild=true /p:PublishProfile=WebDeploy /p:CreatePackageOnPublish=True /p:VisualStudioVersion=11.0" ContinueOnError="false" />

执行上述操作会导致构建/发布反复运行。

我尝试过命名目标不同,通过另一个目标调用它无济于事。

我如何运行&#34;发布&#34;项目没有进入重复循环?这可以用另一种方式完成吗?

2 个答案:

答案 0 :(得分:4)

如果您只构建Visual Studio,那么将这样的内容放入您的csproj文件(最后)将起作用:

 <Target Name="Deploy" AfterTargets="Build">
   <MSBuild
     Projects="$(ProjectPath)"
     Targets="WebPublish"
     Properties="PublishProfile=LocalDeploy"
   />
 </Target>

但是,如果使用MSBuild构建,则会导致循环依赖。我还没有找到一个解决方案,允许你发布在Visual Studio和MSBuild中都有效的构建。

答案 1 :(得分:0)

以前我使用Visual Studio和TFS Server构建,工作正常,但是当我转移到GO-CD时,以下代码导致循环依赖创建包。

 <Target Name="CopyLinkedContentFiles" AfterTargets="Build" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Copy SourceFiles="%(Content.Identity)"
      DestinationFiles="%(Content.Link)"
      SkipUnchangedFiles='true'
      OverwriteReadOnlyFiles='true'
      Condition="'%(Content.Link)' != ''" />