减少 .NET 标准类库的依赖关系?



我已经使用Visual Studio 2017将我的一些类库转换为.NET Standard。

这很容易,添加一个 .NET Standard 类库项目来代替原始项目,并在其中添加所有文件。.csproj文件现在甚至看起来像一个带有软件包信息等的nuspec文件。在项目选项中,有一个"生成时生成NuGet包"的复选框,我选中了该复选框。简单易行。

但是,我的类库的 .NET Framework 使用者现在获得了大量的依赖项,我计算了至少 20 个其他添加的 nuget 包,其中大部分对于我的库来说是完全不必要的。换言之,"容易太容易了"吗?

这只是我使用 .NET Standard 作为唯一构建输出的副产品,我也应该添加回一个 .NET Framework 库吗?

诸如以下内容的包将被添加到使用我的库的项目中,即使它们是完全不必要的:

  • 系统.安全.加密.*
  • 系统.Xml.*
  • System.IO.*

等等,添加了很多包。我的库进行"美化"的阵列分析,根本不需要太多。

Visual Studio项目配置为面向.NET Standard 1.0,唯一可见的引用是"NETStandardLibrary",因此我自己添加的并不是所有这些。

我已经检查了包装,它似乎也没有列出所有这些。

是否可以仅添加所需的包,并且仍以 .NET 标准 1.0 为目标?

我的类库在这里是开源的: https://github.com/lassevk/DiffLib
nuget 包在这里: http://www.nuget.org/packages/difflib/2017.4.24.2347

目前这是一个相当复杂的情况:

是否可以仅添加所需的包,并且仍以 .NET 标准 1.0 为目标?

是的,您可以这样做,但不再建议这样做。从本质上讲,.NET Standard是由引用它的包组成的规范。支持的方式是引用NETStandard.Library因为它保证为您提供正确构建所需的所有编译引用和逻辑。

从即将推出的netstandard2.0开始,NETStandard.Library将是一个没有依赖项的平面包,如果您的项目或任何其他项目引用它们,则各个包将从依赖树中删除。此外,NETStandard.Library不会作为依赖项发布 - 因此,如果生成netstandard2.0库,则生成的 NuGet 包将没有依赖项。(在 .net 框架项目中使用它时需要安装NETStandard.Library.NETFramework- NuGet 应该自动执行此操作)。

话虽如此,如果你真的想这样做,你可以设置

<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>

csproj,然后添加<PackageReference Include="System.[Something]" Version="4.3.0" />等项目以满足您需要的一切。

最新更新