为具有多个项目的解决方案创建nuget包

我们目前正在构建包含多个项目的解决方案。

我们有这样的事情:

- Common - Logging - Logging.NLog - Threading 

所以Logging.NLog依赖于Logging,Logging on Common等。

当我们打包Logging.NLog时,我希望nuget能够发现Loggin和Common dependecies。

此刻,我用Common创建了一个包,然后在Logging中我安装了包Common

 install-package Common 

但每当我对Common进行修改时,我都必须更新包,它们是由我们的连续集成系统(Hudson)创建的,所以当我们开发时它非常烦人。

我想简单地有一个项目参考(添加引用 – >项目…),并且nuget无论如何都会发现依赖项。

有没有办法实现它?

有针对此确切方案的计划function

这显然是这样的:

 > nuget.exe pack proj.csproj -IncludeReferencedProjects 

它显然已经在几天前 实施 ,但仍有一些问题仍然 存在 。

目前的function允许:

  • 将几个项目的工件打包到一个nuget包中(通过递归遍历项目引用),

要么

  • 如果引用的项目附带.nuspec文件,则创建对这些项目的关联包的nuget包引用。

function请求一直追溯到1.5,但它一直在滑落。 最近,它收集了足够的质量(请求),计划在Nuget 2.3中发布。

发布计划为“2013年4月底”制定版本2.3,敬请期待。
(目前,最新的Nuget版本是2.2.1)。

我认为Charles意味着他希望NuGet自动将项目引用解析为包依赖项,如果所引用的项目也用于构造NuGet包,对吧?

例:

  1. 设置日志记录以生成NuGet包
  2. Logging.Nlog设置为生成NuGet包
  3. Logging.Nlog具有对Logging的项目引用。
  4. 生成的Logging.Nlog包应该依赖于生成的Logging包。

这也是我一直在寻找自己的东西,但遗憾的是我发现它目前还没有得到支持。 有一个工作项 ,计划在NuGet 1.7,但甚至没有设计如何处理这个。

这个post有一个很好的建议: NuGet和多个解决方案

基本上,通过自己的发布生命周期,将公共组件分解为自己的解决方案。

目前无法完全按照您的要求进行操作,但以下内容可帮助您简化更新。

听起来您需要将nuspec文件添加到您的解决方案中。 类似于以下三个文件。 注意后两个中的依赖项。 这些引用与[$ version $]相同的dll版本。 这意味着当您运行以下命令时,它会更新所有三个,因为依赖项上的方括号需要特定版本的依赖包。

PM> update-package常见

在Hudson中,您需要使用nuget pack命令执行这些nuspec文件( 请参阅Nuget命令参考 )并将结果包包含在工件中,并将它们部署到本地nuget服务器。 我会把它留给你。

您需要做的另一件事是确保所有程序集都获得相同版本的相同版本。 同样,Hudson可以处理这个问题,或者您可以使用通用的AssemblyInfo文件。

Common.nuspec

    $version$ Charles Ouellet  http://domain/Content/images/LOGO_32x32.png Common Common false full description here       

Logging.nuspec

    $version$ Charles Ouellet  http://domain/Content/images/LOGO_32x32.png Logging Logging false full description here          

Logging.NLog

    $version$ Charles Ouellet  http://domain/Content/images/LOGO_32x32.png Logging.NLog Logging.NLog false full description here