目标依赖图中有一个循环依赖关系,涉及目标"DockerBuildServiceReferences"



我正在尝试将Docker支持添加到现有的ASP.NET(Core(Web应用程序中。

到目前为止,我所做的就是右键单击我的解决方案,然后单击Add > Docker Support。然后,当我尝试使用Docker开始调试时,我会收到以下错误:

C:Program Files (x86)Microsoft Visual Studio2017CommunityMSBuildMicrosoftVisualStudiov15.0DockerMicrosoft.VisualStudio.Docker.Compose.targets(170,5): error MSB4006: There is a circular dependency in the target dependency graph involving target "DockerBuildServiceReferences".

我已经检查了Microsoft.VisualStudio.Docker.Compose.targets文件,我看不到任何涉及DockerBuildServiceReferences的循环依赖性,实际上在整个文件中搜索它仅在两个地方提到:

  <!--
  ***********************************************************************************************
  Docker Compose Project Targets
  ***********************************************************************************************
  -->
  <UsingTask TaskName="CleanWorkspace" AssemblyFile="$(DockerBuildTasksAssembly)" />
  <UsingTask TaskName="EnsureMsVsMonExists" AssemblyFile="$(DockerBuildTasksAssembly)" />
  <UsingTask TaskName="EnsureVsDbgExists" AssemblyFile="$(DockerBuildTasksAssembly)" />
  <UsingTask TaskName="GetServiceReferences" AssemblyFile="$(DockerBuildTasksAssembly)" />
  <UsingTask TaskName="PrepareForBuild" AssemblyFile="$(DockerBuildTasksAssembly)" />
  <UsingTask TaskName="PrepareForLaunch" AssemblyFile="$(DockerBuildTasksAssembly)" />
  <PropertyGroup>
    <BuildDependsOn>
      DockerSetDevelopmentMode;
      DockerPrepareForBuild;
      DockerGetServiceReferences;
      DockerBuildServiceReferences;
      $(BuildDependsOn);
      DockerComposeBuild;
      DockerPrepareForLaunch;
    </BuildDependsOn>
    <CleanDependsOn>
      DockerSetDevelopmentMode;
      DockerCleanWorkspace;
      $(CleanDependsOn);
      DockerGetServiceReferences;
      DockerCleanServiceReferences;
    </CleanDependsOn>
  </PropertyGroup>
  <PropertyGroup>
    <DockerComposeProjectPath>$(MSBuildProjectFullPath)</DockerComposeProjectPath>
  </PropertyGroup>

和:

  <!--
  ***********************************************************************************************
  TARGET : DockerBuildServiceReferences
  ***********************************************************************************************
  -->
  <Target Name="DockerBuildServiceReferences">
    <PropertyGroup>
      <DockerServiceReferenceTarget Condition=" '$(DockerDevelopmentMode)' == 'Regular' ">DockerPackageService</DockerServiceReferenceTarget>
      <DockerServiceReferenceTarget Condition=" '$(DockerServiceReferenceTarget)' == '' ">Build</DockerServiceReferenceTarget>
    </PropertyGroup>
    <MSBuild Projects="@(DockerServiceReference)"
             Targets="$(DockerServiceReferenceTarget)"
             Properties="Configuration=$(Configuration);Platform=$(Platform);BuildingInsideVisualStudio=false"
             Condition=" '@(DockerServiceReference)' != '' " />
  </Target>

我还尝试过从头开始创建一个新的ASP.NET Core应用程序,并为此添加了Docker支持,它可以很好地工作。这使我相信这个错误正在涵盖其他问题。

我正在使用Visual Studio 2017,docker version的输出如下(如果这完全有帮助(:

Client:
 Version:      17.05.0-ce-rc1
 API version:  1.27 (downgraded from 1.29)
 Go version:   go1.7.5
 Git commit:   2878a85
 Built:        Wed Apr 12 19:43:25 2017
 OS/Arch:      windows/amd64
Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true

任何想法都将不胜感激!

对于其他遇到此错误和@vmatm答案的其他人无法解决。如果您在解决方案文件夹中运行迁移命令,即.csproj和dockerfile的级别,也可能发生。运行迁移时,请确保您在项目文件夹中。

根据此线程,如果您在同一文件夹中没有Dockerfile和项目文件(.csproj(,或者您有一个解决方案文件(.sln(<strong,则可能发生这种情况。>和在同一文件夹中的项目文件(.csproj(。

您可能已经在同一目录中为其创建了一个解决方案和启动项目,这将导致Docker圆形参考。尝试使用单独的文件夹重新创建您的项目,然后重做所有步骤。

相关内容

最新更新