减少.NET Standard类库的依赖性?

时间:2017-05-16 07:45:14

标签: nuget .net-standard

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

这很简单,添加一个.NET Standard类库代替原始项目并添加所有文件。 .csproj文件现在看起来像一个nuspec文件,包含包信息等。在项目选项中,有一个"在构建"上生成NuGet包的复选框,我检查了它。容易腻。

但是,我的类库的.NET Framework消费者现在获得了大量的依赖关系,我计算了至少20个已添加的其他nuget包,其中大部分对我的库来说是完全不必要的。换句话说,“易于”太强容易?"

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

以下的软件包将添加到使用我的库的项目中,即使它们完全没必要:

  • System.Security.Cryptography。*
  • 的System.Xml。*
  • System.IO。*

等。这里添加了大量的软件包。我的图书馆确实得到了“荣耀”#34;数组分析并不需要太多。

Visual Studio项目配置为以.NET Standard 1.0为目标,唯一可见的引用是" NETStandardLibrary"所以不像我自己添加了所有这些。

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

我是否可以只添加我需要的软件包并仍然以.NET Standard 1.0为目标?

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

1 个答案:

答案 0 :(得分:6)

目前情况非常复杂:

  

我是否可以只添加我需要的软件包并仍然以.NET Standard 1.0为目标?

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

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

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

<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>

csproj文件中,然后为您需要的所有内容添加<PackageReference Include="System.[Something]" Version="4.3.0" />等项目。