Я пытаюсь изучить и понять nuget и msbuild в .NET Core, изучая и вручную редактируя файлы проекта (.csproj в .NET Core 2.2). Итак, когда я создаю проект WebApi, файл .csproj выглядит так:
<Project Sdk = "Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.AspNetCore.App" />
<PackageReference Include = "Microsoft.AspNetCore.Razor.Design" Version = "2.2.0" PrivateAssets = "All" />
</ItemGroup>
</Project>
Обратите внимание, что для первого PackageReference не указан атрибут версии.
Теперь, если я укажу, что это последняя стабильная версия 2.2.3, например:
<PackageReference Include = "Microsoft.AspNetCore.App" Version = "2.2.3" />
Я получаю предупреждение о сборке NETSDK1071, в котором говорится:
A PackageReference to 'Microsoft.AspNetCore.App' specified a Version of
2.2.3. Specifying the version of this package is not recommended. For more information, see https://aka.ms/sdkimplicitrefs
Это предупреждение не отображается, когда атрибут версии опущен, поэтому мне было интересно, как разрешается версия пакета nuget, если она не задана явно?
Кроме того, как dotnet build узнает, какая версия пакета nuget рекомендуется с текущими настройками проекта?





Из связь в предупреждении можно узнать, что это не обычный пакет, а Мета-пакет.
Это означает, что этот пакет зависит от вашего TargetFramework, и это означает, что когда вы ориентируетесь на конкретный фреймворк, установленный на вашем компьютере (как SDK), пакет будет взят из конкретного SDK.