在一个解决方案中从多个项目创建一个NuGet包
我有一个我正在研究的包含4个类库项目(A
,B
,C
,D
)的解决方案。 A
和B
可被视为解决方案中的顶级项目。 A
和B
参考文献C
和D
都是独立的。在一个解决方案中从多个项目创建一个NuGet包
这四个项目代表了一组我处理自动化工作流的服务。它们都是密切相关的,只会在一个地方使用(服务经理),所以我不想将它们分成不同的解决方案。
我的问题是,我想创建一个NuGet包,它将包含所有4个库,而无需全部构建它们并手动收集它们的DLL。我知道我可以通过A
或B
参考剩余的项目在技术上达到此目的,但这不是真正的关系,我认为应该避免。
我已经做了大量的搜索这个问题,我找不到一个解决方案,而不是手动收集DLL并自己构建软件包。有没有办法实现我想要使用NuGet的特性/功能的结果?
注意:如果标签没有说清楚我目前正在使用VS2010和TeamCity构建服务器。如果它是相关的,我也通过一个存储服务器使用Git。
编辑:我刚刚意识到这可能是足够重要的提及。这些项目会引用其他需要标记为依赖关系的NuGet包。
你必须定义你自己的nuspec清单。你可以列出包含在files
部分组件:
<file src="A\bin\Release\A.dll" target="lib\net40" />
<file src="B\bin\Release\B.dll" target="lib\net40" />
...
有关详细信息读取NuSpec reference。
然后在NuPack构建步骤中引用nuspec文件而不是proj。
如果你已经下载NuGet.exe 你可以运行:nuget pack Myproject.csproj -IncludeReferencedProjects
这应该包括你所有的项目。以下是NuGet docs的注释:
如果项目引用了其他项目,则可以将引用的项目作为包的一部分添加或者作为依赖项添加到-IncludeReferencedProjects选项中。这是递归完成的。例如,假设您有项目A.csproj,它引用B.csproj和C.csproj,而B.csproj引用D.csproj & E.csproj,C.csproj引用F.csproj & G.csproj。然后,当你运行:
nuget pack A.csproj -IncludeReferencedProjects
生成的包将包含项目B,C,d,E,F & G,文件除了文件从项目A.
如果引用的项目有一个相同的名字相同的nuspec文件,那么被引用的项目会被添加为依赖项。使用相同的例子,假设现在在与项目文件C.csproj相同的目录中存在文件C.nuspec。当您运行:
nuget pack A.csproj -IncludeReferencedProjects
生成的包将包含除了从项目中的文件从项目B,d,E,文件和包装对C.
依赖另请参见Command line reference 。
这可能会完全解决这个问题: nuget.exe包proj.csproj -IncludeReferencedProjects
你可以看到: Create nuget package for a solution with multiple projects
您是否使用的TeamCity的NuGet包构建步骤? – 2013-04-08 15:24:58
@DavinTryon - 由于这个问题,我没有在TeamCity中设置项目。这个解决方案的实际版本实际上是一个单独的项目,现在它在SVN/CC.NET上。 – Logarr 2013-04-08 15:27:33