.net-core - 在 .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
所以我有两个问题:
- 为方便起见,我使用“内部”项目参考进行了测试,但这与外部包参考(即 NuGet)的工作方式相同吗?
- 有人可以在这里解释理由吗?对我来说似乎有风险,如果我的项目的任何依赖项中的依赖项的更改正在使用该子依赖项,那么它可能会破坏我的项目。换句话说,为什么允许这样做?隐式使用依赖项的依赖项似乎总是一个坏主意,因为它可能会更改和破坏您的代码,那么为什么框架允许这样做呢?
解决方案
是的,这就是它在所有方面的工作方式。
您可以使用它
PrivateAssets
来控制它:
推荐阅读
- python - 在 Python 代码中捆绑第三方 .exe 并生成另一个可移植的 .exe
- sql-server - 返回包含特殊字符的字符串
- python - 将 Python Flask Web API 部署到 Azure 门户时出现依赖性问题
- javascript - AngularJS - 将数据推送到数组时未更新 ng-repeat 和绑定
- c++ - c_str() 与 data() 在返回类型方面
- sql - Ms Access Query 允许空行
- tensorflow - 为什么在我自己的数据集上使用 ssd_mobilenet_v1_pnp 的结果很差?
- python - XML 格式不正确
- python - Python:查找任意曲线的拟合参数数量
- javascript - 使用基于复选框的 javascript更改/附加 html标记属性