【问题标题】:error MSB4006: There is a circular dependency in the target dependency graph involving target错误MSB4006:在涉及目标的目标依赖图中存在循环依赖
【发布时间】:2014-04-08 09:45:18
【问题描述】:

我在使用 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" />

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

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

如何在项目上运行“发布”而不进入重复循环?这可以通过其他方式完成吗?

【问题讨论】:

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


【解决方案1】:

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

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

但是,如果您使用 MSBuild 进行构建,这将导致循环依赖。我还没有想出一个解决方案,可以让你发布在 Visual Studio 和 MSBuild 中都可以使用的构建。

【讨论】:

    【解决方案2】:

    以前我使用 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)' != ''" />
    

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 2016-09-04
      • 2020-11-18
      • 2020-03-14
      • 2015-10-12
      • 2018-01-02
      • 2023-01-03
      • 1970-01-01
      相关资源
      最近更新 更多