在一个解决方案中从多个项目创建一个NuGet包

我有一个我正在研究的解决方案,它包含4个类库项目( ABCD )。 AB可以被认为是解决方案中的顶级项目。 AB参考CD独立。

这四个项目代表了我处理自动化工作流程的一组服务。 它们都是密切相关的,只会在一个位置(服务管理器)使用,所以我不想将它们分成不同的解决方案。

我的问题是我想创建一个包含所有4个库的NuGet包,而不必全部构建它们并手动收集它们的DLL。 我知道我可以通过让AB引用剩余的项目来实现这一点,但这不是真正的关系,我觉得应该避免。

我已经做了很多关于这个问题的搜索,除了手动收集DLL并自己构建包之外,我找不到解决方案。 有没有办法达到我想要使用NuGet的function/能力的结果?

注意 :如果标签不清楚我正在使用VS2010和TeamCity构建服务器。 如果它是相关的,我也通过Stash服务器使用Git。

编辑 :我刚刚意识到这可能很重要,值得一提。 这些项目确实引用了我需要标记为依赖项的其他NuGet包。

您必须定义自己的nuspec清单。 您可以在files部分列出包含程序集:

   ... 

有关更多详细信息,请参阅NuSpec参考 。

然后在NuPack构建步骤中引用该nuspec文件而不是proj。

如果你已经下载了NuGet.exe你可以运行: nuget pack Myproject.csproj -IncludeReferencedProjects ,这应该包括你的所有项目。 这是来自NuGet 文档的说明 :

如果项目引用其他项目,则可以将引用的项目作为包的一部分添加,或者作为依赖项添加-IncludeReferencedProjects选项。 这是递归完成的。 例如,假设您有项目A.csproj,它引用B.csproj和C.csproj,而B.csproj引用D.csproj和E.csproj,C.csproj引用F.csproj和G.csproj。 然后,当你运行:

 nuget pack A.csproj -IncludeReferencedProjects 

除了项目A中的文件外,生成的包还将包含项目B,C,D,E,F和G中的文件。

如果引用的项目具有相同名称的相应nuspec文件,则该引用的项目将作为依赖项添加。 使用相同的示例,假设现在文件C.nuspec与项目文件C.csproj位于同一目录中。 当你运行:

 nuget pack A.csproj -IncludeReferencedProjects 

生成的包将包含项目B,D,E中的文件,以及项目A中的文件,并且包依赖于C.

另请参阅命令行参考 。

这可能会解决这个问题:nuget.exe pack proj.csproj -IncludeReferencedProjects

您可以看到: 为具有多个项目的解决方案创建nuget包