【问题标题】:Reducing dependencies for a .NET Standard class library?减少 .NET Standard 类库的依赖关系?
【发布时间】:2017-05-16 07:45:13
【问题描述】:

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

这很简单,添加一个 .NET Standard 类库项目来代替原始项目,然后在其中添加所有文件。 .csproj 文件现在甚至看起来像一个带有包信息等的 nuspec 文件。在项目选项中,我检查了“在构建时生成 NuGet 包”的复选框。轻松愉快。

但是,我的类库的 .NET Framework 使用者现在获得了大量的依赖项,我计算了至少 20 个其他添加的 nuget 包,其中大部分对我的库来说完全没有必要。换句话说,“easy peasy too 容易吗?”

这只是我使用 .NET Standard 作为 only 构建输出的副产品,我也应该添加回 .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

【问题讨论】:

  • 我对生成 nuget 包的简单程度感到特别满意,我担心如果我返回多个构建输出,我需要返回维护 nuspec 并自己构建系统现在可以让 Visual Studio 处理它。
  • 您看不到的是您实际使用的软件包完成工作所需的软件包。 .NETCore 团队上周承认,像那样拆分 corefx 是一个错误,导致的问题比解决的问题多得多。随着 v2.0 的发布,它将很快得到修复,希望在此之后稳定下来,这将很快成为一个糟糕的记忆。
  • 好的,所以从platform support matrix 来看,我可能需要同时包含 2.0 和 1.0 作为可能的目标,以至少帮助人们使用更新的运行时。我不愿意只升级到 2.0 并放弃 1.6,因为矩阵包含 1.0 支持的更多框架版本。这似乎是可行的,因为我知道我可以通过手动“破解”项目文件来列出多个标准版本目标。谢谢。
  • 虽然如果我可以说我只需要其中的 1 或 2 个包,那将包括更多,因为它们的依赖关系也很好,但我想这样的事情只会被修复通过进入 2.0,1.x 在这方面不会变得更好,这就是你的意思吗?如果是这样,请发布答案,以便我接受。

标签: nuget .net-standard


【解决方案1】:

目前情况相当复杂:

我可以只添加我需要的包并且仍然以 .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 文件中,然后添加&lt;PackageReference Include="System.[Something]" Version="4.3.0" /&gt; 之类的项目以满足您的所有需求。

【讨论】:

  • > "此外,NETStandard.Library 不会作为依赖项发布 - 因此,如果您构建 netstandard2.0 库,则生成的 NuGet 包将没有依赖项。" - 我很困惑。刚刚打包了一个针对 netstandard 2 的库,这是生成的 nuspec:
  • 看起来您是使用旧工具构建的——可能是 1.0.* 或使用 project.json 的预览版?这些版本中没有任何保护措施。
  • 确保在为 .net 标准 2.0 构建时,项目目录内命令行上的 dotnet --version 至少显示 2.0.0
  • 谢谢。我更新了各种 nuget 包(包括 Xamarin.Forms) - 做了另一个包,现在它可以工作了:-)
猜你喜欢
  • 2017-07-29
  • 2023-04-05
  • 2019-06-15
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 2020-09-19
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多