【问题标题】:Importing the file 'xxx.targets' results in a circular dependency导入文件“xxx.targets”会导致循环依赖
【发布时间】:2018-01-25 10:06:19
【问题描述】:

我有一个名为“Contoso.Library”的 NuGet 包,其目标文件为:“/build/Contoso.Library.targets”

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" />
  </ItemGroup>
</Project>

但是,当我尝试构建包含此内容的项目时,我收到以下错误:

将文件“C:\Program Files\dotnet\sdk\2.1.2\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.targets”导入文件“C:\Users\rb.nuget\packages\ contoso.library\1.0.0\build\contoso.library.targets”导致循环依赖。 C:\Users\rb.nuget\packages\contoso.library\1.0.0\build\contoso.library.targets

我已经确认,如果我将目标文件重命名为“contoso.library.targets.xxx”,此错误就会消失,这表明目标文件就是问题所在。

作为参考,这里是使用 Contoso.Library 的项目的项目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Contoso.Library" Version="1.0" />
  </ItemGroup>

</Project>

【问题讨论】:

    标签: c# msbuild nuget


    【解决方案1】:

    原来答案其实很简单——只需从目标文件中的 Project 元素中删除“Sdk”属性即可:

    <Project Sdk="Microsoft.NET.Sdk">
    

    变成

    <Project>
    

    【讨论】:

    • Sdk 属性决定是使用新的.csproj 格式还是旧的.csproj 格式。所有这一切都是让您重新使用旧的.csproj 格式(这是好事还是坏事取决于具体情况)。就个人而言,我会尝试找到一种方法来做到这一点,而无需切换回旧的.csproj 格式。
    • 但是“sdk”属性仍然会在csproj文件中设置,所以我仍然会使用新格式,对吧?
    • 哦,我误解了您是在主项目中而不是在目标文件中执行此操作。那么是的,删除它是正确的解决方案。
    • 我很生气,我最终在这里解决我的问题,因为在 MS 文档中没有任何地方提供这个小块信息。正式+1,因为这就是我能给你的全部。 +1,000 非正式地拯救我从头上拔出最后几缕头发! :)
    【解决方案2】:

    同样的错误和同样的解决方案(感谢@RB。!),但我使用的是Directory.Build.props 文件而不是目标文件。

    我的错误:

    导入文件“C:\Program 文件\dotnet\sdk\3.1.401\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props”进入 文件“snip>\Directory.Build.props”会导致循环 依赖

    确切的解决方案:
    我从Directory.Build.props 中删除了Sdk="Microsoft.NET.Sdk" 属性,项目正确重建。

    HTH!

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 2014-04-15
      • 1970-01-01
      • 2021-09-27
      • 2015-06-08
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多