2013-04-08 142 views
16

我有一个我正在研究的包含4个类库项目(ABCD)的解决方案。 AB可被视为解决方案中的顶级项目。 AB参考文献CD都是独立的。在一个解决方案中从多个项目创建一个NuGet包

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

我的问题是,我想创建一个NuGet包,它将包含所有4个库,而无需全部构建它们并手动收集它们的DLL。我知道我可以通过AB参考剩余的项目在技术上达到此目的,但这不是真正的关系,我认为应该避免。

我已经做了大量的搜索这个问题,我找不到一个解决方案,而不是手动收集DLL并自己构建软件包。有没有办法实现我想要使用NuGet的特性/功能的结果?

注意:如果标签没有说清楚我目前正在使用VS2010和TeamCity构建服务器。如果它是相关的,我也通过一个存储服务器使用Git。

编辑:我刚刚意识到这可能是足够重要的提及。这些项目会引用其他需要标记为依赖关系的NuGet包。

+0

您是否使用的TeamCity的NuGet包构建步骤? – 2013-04-08 15:24:58

+0

@DavinTryon - 由于这个问题,我没有在TeamCity中设置项目。这个解决方案的实际版本实际上是一个单独的项目,现在它在SVN/CC.NET上。 – Logarr 2013-04-08 15:27:33

回答

11

你必须定义你自己的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。

9

如果你已经下载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

+1

我实际上已经通过重新设计我的项目结构来解决这个问题。你的回答忽略了我在我的项目中概述的真实项目关系,这不是你解释的树。 – Logarr 2013-08-26 14:27:20

+2

@记者:你介意添加一个描述你如何解决它的答案吗?谢谢! – 2016-04-06 14:23:18

+0

@Stécy - 我会尽力的。首先,我必须记住我指的是哪个解决方案... – Logarr 2016-04-06 15:56:58

相关问题