Как остановить перетаскивание NetStandard 1.0 Nuget в NetStandard.Library в проекте 4.7.1?

Я создал проект Net Standard и упаковал его с помощью Nuget, используя команду pack приложения dotnet.

C:\Program Files\dotnet\dotnet.exe" pack src/Acp.Framework.Essentials

Это создает сборку класса NetStandard 1.0 в следующем пакете Nuget:

Обозреватель пакетов NuGet со ссылкой на netstandard1.0

Если я добавлю этот пакет Nuget в Visual Studio в консольное приложение Windows Classic Desktop .Net, ориентированное на 4.7.1, он перетащит пакет Nuget NetStandard.Library 1.6.1 и длинный список фасадов. Эти dll копируются в папку bin и включают все перенаправления в app.config.

Я не хочу, чтобы эти фасады устанавливались (ни ссылки Nuget, ни копирование в выходную папку), и мне не нужны перенаправления в приложении.

Насколько я понимаю, с 4.7.1 вам не нужна NetStandard.Library. Правильно ли я понимаю?

Нужно ли мне изменить пакет Nuget, чтобы они не загружались, я делаю что-то еще неправильно?

В файле проекта для потребляющего проекта у меня есть

<Project ToolsVersion="15.0" ... />
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>

Я пробовал это в Visual Studio 2017 15.4.1 и 15.4.2.

Если я ссылаюсь на dll напрямую или через проект вместо Nuget, все работает нормально


person Daniel James Bryars    schedule 01.11.2017    source источник


Ответы (1)


Насколько я понимаю, с 4.7.1 вам не нужна NetStandard.Library. Правильно ли я понимаю?

Да, ты прав.

Пакет NETStandard.Library ссылается на набор пакетов NuGet, определяющих стандартную библиотеку .NET. Как и пакет Microsoft.AspNetCore, пакет сам по себе не содержит dll, а ссылается на ряд других пакетов.

Кроме того, на пакет NETStandard.Library обычно ссылаются проекты, но не библиотеки. Таким образом, библиотеки не должны ссылаться на пакет библиотеки NETStandard. И эта зависимость была изменена в версии 2.0.4, вы можете создать проект с целевым фреймворком .NET Standard 2.0:

введите здесь описание изображения

Дополнительные сведения см. в разделе Что такое метапакет NETStandard.Library?. .

Кроме того, вы можете отключить включение зависимости NETStandard.Library в качестве зависимости вашего пакета NuGet без полного отключения неявной ссылки следующим образом:

<ItemGroup>
    <PackageReference Update="NETStandard.Library" PrivateAssets="all" />
</ItemGroup>

Или вы можете удалить эту зависимость напрямую с помощью обозревателя пакетов NuGet.

Надеюсь это поможет.

Изменить: добавлено комментарий Йохана Б. ниже с использованием PrivateAssets="all"

person Leo Liu-MSFT    schedule 02.11.2017
comment
Спасибо, здорово помогает. Это решает мою конкретную проблему с пакетами Nuget, которые я контролирую; У вас есть предложение для тех, кого нет у меня? - person Daniel James Bryars; 02.11.2017
comment
Может что-то изменилось, но PrivateAssets="true" у меня не работает, а PrivateAssets="all" работает. - person Johan B; 06.09.2019