发布 .net 标准库及其所有依赖项?

Publish .net standard library with all it's dependencies?

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

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

该库是一个 .net 标准 2.0 库,我之前用 .net classic 做过这个,输出文件夹总是包含所有必需的库,即使是来自 NuGet 包的库,但带有 . net 标准有些东西发生了变化,现在只复制引用项目中的库,没有引用的 NuGet 包被复制到输出文件夹。

干杯。

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

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

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

我只是不喜欢项目 B 有一个 NuGet 包,如果它只与使用相关的话 with/by 项目 A,因为它将单独出现在我的 NuGet 提要中。

尝试:

dotnet publish

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

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

长:

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

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

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