首页 > 解决方案 > 在 .NET Core 中使用依赖项的依赖项

问题描述

我试图了解依赖项在 .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>

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

所以我有两个问题:

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

标签: .net-coredependenciesnugetcsproj

解决方案


  1. 是的,这就是它在所有方面的工作方式。

  2. 您可以使用它PrivateAssets来控制它:

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


推荐阅读