在.NET Core中使用依赖项的依赖项



我正在努力了解依赖关系在.NET Core中是如何工作的。

假设我有两个项目。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="..Project2Project2.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包引用时,我希望它不再编译。。。但它确实可以编译!看起来,它可以使用Newtonsoft.Json,它是Project2的依赖项。

所以我有两个问题:

  1. 我用一个";内部";为了方便起见,项目引用,但这与外部包引用(即NuGet(的工作方式相同吗
  2. 有人能解释一下这里的理由吗在我看来,如果我的项目使用的是子依赖项,那么更改项目的任何依赖项中的依赖项都可能破坏我的项目。换句话说,为什么允许这样做隐式使用依赖项的依赖项似乎总是一个坏主意,因为它可能会更改和破坏代码,那么为什么框架允许这样做呢
  1. 是的,这就是它在所有方面的工作方式。

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

https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#controlling-依赖资产

相关内容

  • 没有找到相关文章

最新更新