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

ang*_*son 6 nuget .net-standard

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

这很简单,添加一个.NET Standard类库项目来代替原始项目,并在其中添加所有文件..csproj文件现在看起来像一个nuspec文件,包含包信息等.在项目选项中,有一个"Build on NuGet package on build"的复选框,我查了一下.十分简单.

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

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

如下所示的包将被添加到使用我的库的项目中,即使它们完全没必要:

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

等等,还有很多包.我的图书馆做了"美化"阵列分析,根本不需要太多.

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

Mar*_*ich 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>
Run Code Online (Sandbox Code Playgroud)

csproj文件中,然后添加<PackageReference Include="System.[Something]" Version="4.3.0" />所需的一切项目.