如何将引用的项目打包到 nuget 包中?

And*_*ndy 6 nuget nuget-package .net-core

我有一个包含 3 个项目的 C# 解决方案;Application.Server、Application.Client 和 Application.Common。服务器和客户端都有一个对 common 的项目引用。

我想打包服务器和客户端,以便我组织中的其他团队可以使用它们。我设置了一些自动构建管道,它们为服务器和客户端发布了 nuget 包。他们不打包或发布通用。当我检查 nuget 包时,我可以看到它们引用了公共包。

有什么方法可以让他们自己构建该项目吗?理想情况下,我不想发布通用包,因为它非常特定于我的应用程序,而且它是其他部门独立使用的东西并没有真正意义。如果我能帮上忙,我也不想担心处理额外的 nuget 包(实际上,Common 实际上是几个项目)。

ziv*_*kan 10

如果您的项目是“旧样式”/非 SDK/传统 csproj,并且如果任何项目使用 NuGet 包,如果所有这些 NuGet 引用都是使用 定义的packages.config,那么使用您可以使用nuget.exe pack -IncludeReferencedProjects. 但是,如果您的任何项目用于PackageReference定义它们的包引用(新的 SDK 样式项目只能使用 PackageReference),那么nuget.exe pack将无法为这些包正确创建 NuGet 依赖项。对于 SDK 风格的多目标项目,nuget pack可能会完全失败。

打包使用 的项目PackageReference或任何 SDK 样式项目的唯一受支持方法是使用 NuGet 的 MSBuild 打包目标(dotnet packmsbuild -t:pack)。但是,它没有与 nuget.exe 的IncludeReferencedProjects.

如果您的项目是 SDK 风格的,那么创建和发布一个或多个包真的不应该变得更加困难。只需dotnet pack在您的解决方案上运行,每个可打包项目都会被打包(记住将您不想成为包的任何类库项目标记为不可打包)。然后使用您喜欢的脚本语言查找并发布所有 nupkg 文件。例如 ( Get-ChildItem -Recurse -Filter *.nupkg $SLN_DIR | ForEach-Object { & dotnet nuget push $_ }, 或将所有 nupkgs 复制/移动到一个地方(或使用适当的设置让 NuGet 首先在那里创建包)并使用dotnet nuget push *.nupkg.

NuGet 团队建议每个程序集一个包,并且该工具会自动为项目引用创建 NuGet 依赖项,因此所有这些都“开箱即用”。要创建包含所有程序集而不是 NuGet 依赖项的包,您需要做大量工作。

  • “NuGet 团队建议每个程序集使用一个包” - 您有该建议的链接吗? (2认同)