【发布时间】: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。
所以我有两个问题:
- 为方便起见,我使用“内部”项目引用完成了测试,但这与外部包引用的工作方式相同(即 NuGet)吗?
- 谁能解释一下这里的基本原理吗? 对我来说这似乎很冒险,如果我的项目的任何依赖项中的依赖项的更改正在使用该子依赖项,那么它可能会破坏我的项目。换句话说,为什么允许这样做? 隐式使用依赖项的依赖项似乎总是一个坏主意,因为它可能会更改和破坏您的代码,那么为什么框架允许这样做呢?
【问题讨论】:
标签: .net-core dependencies nuget csproj