使用Visual Studio构建获取错误“MSB4006:目标依赖关系图中存在循环依赖关系,涉及目标”Build“。”

时间:2017-04-17 18:57:23

标签: c# tfs msbuild

我们正在尝试让Team Foundation Server 2017自动化构建,到目前为止我们一直只使用Visual Studio来构建和发布,但是现在让Team Foundation Server执行此操作我们遇到了循环依赖的问题。 / p>

我们正在使用Visual Studio构建步骤。

解决方案中有多个项目(.sln)。

该项目引发了对其他两个项目的引用,这些项目没有直接或间接引用该项目。

我一直在寻找一篇描述如何追踪这个循环引用的文章,但到目前为止我发现的所有内容都是关于MSBuild的,或者它是否存在目标“发布”或“Build”以外的问题。< / p>

错误:

  

[错误] d:\ VS2017 \的MSBuild \微软\ VisualStudio的\ V15.0 \网络\ Microsoft.Web.Publishing.targets(1279,11):

     

错误MSB4006:目标依赖项中存在循环依赖关系   涉及目标“Build”的图表。

     

项目“D:\ Agent \ 2.112.0_work \ 2 \ s \ SLNNAME \ SLNNAME.sln”(1)是   建造   “D:\ Agent \ 2.112.0_work \ 2 \ s \ SLNNAME \ Inventory \ Inventory.csproj”(17)   在节点1上(默认目标)。

     

d:\ VS2017 \的MSBuild \微软\ VisualStudio的\ V15.0 \网络\ Microsoft.Web.Publishing.targets(1279,11):   错误MSB4006:目标依赖项中存在循环依赖项   涉及目标“Build”的图表。

     

[d:\代理\ 2.112.0_work \ 2 \ S \ SLNNAME \库存\ Inventory.csproj]

     

完成建筑项目   “d:\代理\ 2.112.0_work \ 2 \ S \ SLNNAME \库存\ Inventory.csproj”   (默认目标) - 失败。

     

完成构建项目“D:\ Agent \ 2.112.0_work \ 2 \ s \ SLNNAME \ SLNNAME.sln”   (默认目标) - 失败。

     

构建失败。

以下是.sln文件中的构建目标:

<Target Name="OverrideAppConfigWithTargetPath">
    <ItemGroup>
      <AppConfigWithTargetPath Remove="@(AppConfigWithTargetPath)" />
      <AppConfigWithTargetPath Include="$(TransformedConfig)" Condition="'$(TransformedConfig)'!=''">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>
  <Target Name="CopyTransformedConfig" Condition="'$(TargetName)' != ''">
    <Copy Condition="Exists('$(TransformedConfig)')" SourceFiles="$(TransformedConfig)" DestinationFiles="$(OutputPath)$(TargetName)$(TargetExt).config" />
    <Copy Condition="Exists('$(TransformedConfig)') And '$(TargetExt)' == '.exe'" SourceFiles="$(TransformedConfig)" DestinationFiles="$(OutputPath)$(TargetName).vshost.exe.config" />
  </Target>
  <Target Name="AfterPublish">
    <PropertyGroup>
      <DeployedConfig>$(_DeploymentApplicationDir)$(TargetName)$(TargetExt).config$(_DeploymentFileMappingExtension)</DeployedConfig>
    </PropertyGroup>
    <Copy Condition="Exists('$(DeployedConfig)')" SourceFiles="$(TransformedConfig)" DestinationFiles="$(DeployedConfig)" />
  </Target>
  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
  </Target>

2 个答案:

答案 0 :(得分:1)

这个错误发生在:

  1. 您在安装了 .NET 4.5 的机器上运行 MSBuild
  2. 您构建了一个引用解决方案的项目,其中 SLN 文件包含 SLN 中的依赖项。

这些依赖项是您在解决方案资源管理器中右键单击项目,选择“项目依赖项”并开始检查项目后将获得的依赖项。这通常是不必要的,因为可以从参考资料中推断出项目依赖关系。 解决方法是在您喜欢的文本编辑器中打开 SLN 文件,然后搜索如下部分:

Project("{AAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyProjectName", "MyProjectName\MyProjectName.csproj", "{B10E1FCF-DFBA-44A8-830F-6F3B54DFBC}"

ProjectSection(ProjectDependencies) = postProject

    {B9E9F8CE-A607-4A6C-97F7-2BD439122F89} = {B9E9F8CE-A607-4A6C-97F7-2BD439122F89}

EndProjectSection

结束项目

只需删除整个部分,您的 Project 节点将如下所示:

Project("{AAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyProjectName", "MyProjectName\MyProjectName.csproj", "{B10E1FCF-DFBA-44A8-830F-6F3B54DFBC}"

结束项目

现在您应该可以成功使用 MSBuild。

答案 1 :(得分:0)

我遇到了同样的问题。

这对我有帮助:

https://community.embarcadero.com/blogs/entry/how-to-fix-msbuild-error-msb4006-38787

我已经在最后一次签入的情况下向项目添加了后生成版本,并且以某种方式,项目依赖项也添加到了.sln中。

它在VS中构建良好,但在TFS构建中却没有。

我只是撤消了对解决方案的最后更改(请参阅链接,删除新的依赖项组)。

ProjectSection(ProjectDependencies) = postProject
    {9D6D8692-16DD-452C-9D08-1498B3D51A9F} = {9D6D8692-16DD-452C-9D08-1498B3D51A9F}
    {9BE28BBA-B3F6-4076-B989-3B1B48DACF38} = {9BE28BBA-B3F6-4076-B989-3B1B48DACF38}
EndProjectSection

不知道这是否可以解决您的问题,在谷歌搜索过程中,我发现许多类似的问题,其原因/解决方案都不同。