Я пытаюсь понять, как работают зависимости в .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>
Когда я удаляю ссылку на пакет Newtonsoft.Json
из Project1, я ожидаю, что он больше не будет компилироваться... Но он компилируется! Похоже, он может использовать Newtonsoft.Json
, который является зависимостью Project2.
Итак, у меня есть 2 вопроса:
Да, так это работает во всем.
Вы можете использовать PrivateAssets
для управления этим: