【问题标题】:Using dependency of dependency in .NET Core在 .NET Core 中使用依赖项的依赖项
【发布时间】:2021-03-22 09:36:44
【问题描述】:

我正在尝试了解依赖项在 .NET Core 中的工作原理。

假设我有 2 个项目。 Project1 有这样的定义:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Project2\Project2.csproj" />
  </ItemGroup>
</Project>

而这个使用 Newtonsoft.Json 依赖的单一类:

public class Wizard
{
    public void DoMagic()
    {
        var settings = Newtonsoft.Json.JsonConvert.DefaultSettings;
    }
}

如您所见,它还引用了Project2,其定义如下:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
  </ItemGroup>
</Project>

当我从 Project1 中删除 Newtonsoft.Json 包引用时,我希望它不再编译...但它确实可以编译!看起来,它可以使用 Project2 的依赖项 Newtonsoft.Json

所以我有两个问题:

  1. 为方便起见,我使用“内部”项目引用完成了测试,但这与外部包引用的工作方式相同(即 NuGet)吗?
  2. 谁能解释一下这里的基本原理吗? 对我来说这似乎很冒险,如果我的项目的任何依赖项中的依赖项的更改正在使用该子依赖项,那么它可能会破坏我的项目。换句话说,为什么允许这样做? 隐式使用依赖项的依赖项似乎总是一个坏主意,因为它可能会更改和破坏您的代码,那么为什么框架允许这样做呢?

【问题讨论】:

    标签: .net-core dependencies nuget csproj


    【解决方案1】:
    1. 是的,这就是它适用于所有事物的方式。

    2. 你可以使用PrivateAssets来控制这个:

    https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#controlling-dependency-assets

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2020-02-18
      • 2017-08-16
      • 2016-11-26
      • 1970-01-01
      • 2020-12-20
      • 2017-07-18
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多