【问题标题】:Publish .net standard library with all it's dependencies?发布 .net 标准库及其所有依赖项?
【发布时间】:2018-06-26 12:11:59
【问题描述】:

我创建了一个动态加载库并执行它的主类的系统。 一切都很完美,我遇到的问题是如何发布这个 DLL 及其所有依赖项。由于没有可执行项目引用它,我必须手动检索依赖项:尝试加载库,检查所需的 DLL,转到 NuGet 缓存文件夹,复制库,​​再试一次,检查它是否抱怨更多依赖项等等直到它拥有所有必需的库。

这是一个真正的痛苦,我还没有找到任何关于如何做到这一点的信息,有可能还是我坚持这个?

该库是一个 .net 标准 2.0 库,我之前使用 .net classic 进行过此操作,并且输出文件夹始终包含所有必需的库,即使是来自 NuGet 包的库,但使用 .net 标准时,有些东西已经发生了变化,现在只有引用项目中的库被复制,没有引用的 NuGet 包被复制到输出文件夹。

干杯。

【问题讨论】:

  • 我分担你的痛苦。这是设计使然,对此有一些大惊小怪和困惑,请参阅github.com/NuGet/Home/issues/4488。而且,当项目A引用项目B发布NuGet包时,B成为A中的NuGet依赖; B 的程序集不包含在 A 的 NuGet 包中。
  • @pfx 哎哟!!!这真的伤害了我的灵魂...... :(我有一个非常肮脏的方法,创建一个.net核心应用程序,引用库并获取除exe之外的结果,但这非常丑陋,不知道他们为什么没有这样做“发布”结果的选项...如果您将评论添加为答案,我将接受它。

标签: c# dll nuget publish .net-standard-2.0


【解决方案1】:

试试:

dotnet publish

应将所有依赖库复制到发布输出文件夹。

【讨论】:

  • 在 Visual Studio 2019 中,类库上的 dotnet publish 不会输出依赖项。该行为不同于发布应用程序。
  • 在 Visual Studio 2022 中,这适用于我的 .Net 标准库。请记住,输出位于子目录中。
  • 还可以确认这对我来说在 VS2022 中有效,并且输出位于 /bin/Debug/netstandard2.1/publish
【解决方案2】:

在撰写本文时,它看起来像是设计使然,并且对此有些大惊小怪和困惑,请参阅记录的 issue on GitHub

此外,在为引用项目 B 的项目 A 发布 NuGet 包时,
B 成为 A 中的 NuGet 依赖项; B 的程序集不包含在 A 的 NuGet 包中。

我通过发布自己的 NuGet 包来处理它。

如果项目 B 的 NuGet 包只与项目 A 一起使用/由项目 A 使用,我不喜欢它,因为它将单独出现在我的 NuGet 提要中。

【讨论】:

    【解决方案3】:

    TLDR:将您的类库项目转换为应用程序,发布应用程序,并将应用程序 DLL 用作库。

    长篇大论:

    我通过将带有许多外部依赖项的插件的完整构建部署到 Ubuntu 18.04 来测试这种方法,它运行良好。

    创建一个类型为控制台应用程序而不是类库的新项目。将所有库代码文件放入控制台应用程序并添加依赖项。摆脱你原来的类库项目(你不再需要它了)。最后,发布控制台应用程序。您将获得一个包含所有依赖项的 DLL。您可以像使用任何其他 DLL 一样使用此 DLL。

    我建议在控制台应用程序项目的末尾加上“库”来命名它,并添加一个 README 来记录它不是真正的应用程序,即使该项目被配置为构建为一个应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 2016-11-08
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多