如何停止将 NetStandard 1.0 Nuget 拖入 4.7.1 项目的 NetStandard.Library?

How to I stop my NetStandard 1.0 Nuget dragging in the NetStandard.Library in a 4.7.1 project?

我已经创建了一个 Net Standard 项目并使用 Nuget 打包它,使用 dotnet 应用程序的 pack 命令。

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

这会在以下 Nuget 包中创建一个 NetStandard 1.0 class 程序集:

如果我将 Visual Studio 中的这个 Nuget 包添加到面向 4.7.1 的 Windows 经典桌面 .Net 控制台应用程序,它会拖入 NetStandard.Library 1.6.1 Nuget 包并且它是一长串门面。这些 dll 被复制到 bin 文件夹,它包括 app.config.

中的所有重定向

我不想安装这些外观(既不是 Nuget 引用,也不是复制到输出文件夹)并且我不想在应用程序中进行重定向。

我的理解是,对于 4.7.1,您不需要 NetStandard.Library。我的理解正确吗?

我是否需要更改 Nuget 包以阻止它们被拉入,我做错了什么吗?

在我的消费项目的 proj 文件中

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

我在 Visual Studio 2017 15.4.1 和 15.4.2 中尝试过这个。

如果我直接引用 dll,或者通过项目而不是 Nuget,它工作正常

My understanding is that with 4.7.1 you don't need the NetStandard.Library. Is my understanding correct?

是的,你是对的。

NETStandard.Library 包引用了一组定义 .NET 标准库的 NuGet 包。与 Microsoft.AspNetCore 包一样,该包本身不包含 dll,而是引用了许多其他包。

此外,NETStandard.Library 包通常会被项目引用,但不会被库引用。所以 NETStandard 库包不应该被库引用。 这个依赖在 2.0.4 版本中被改变了,你可以用目标框架 .NET Standard 2.0:

创建一个项目

有关详细信息,请参阅 What is the NETStandard.Library metapackage?

此外,您可以禁用 NETStandard.Library 依赖项作为 NuGet 包的依赖项,而无需完全禁用隐式引用,方法如下:

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

或者您可以直接通过 NuGet Package Explorer 删除该依赖项。

希望这对您有所帮助。

编辑:更新为包含 ,使用 PrivateAssets="all"