为具有多个项目的解决方案创建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包,对吧?
例:
- 设置日志记录以生成NuGet包
- Logging.Nlog设置为生成NuGet包
- Logging.Nlog具有对Logging的项目引用。
- 生成的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