Nuget - 打包一个包含多个项目(面向多个框架)的解决方案

17

假设我有以下解决方案,其中包含多个针对不同框架的相同代码的版本,并且我想从中生成nuget包。

SharedLib.sln
  SharedLib.Net35.csproj
    packages.config
  SharedLib.Net40.csproj
    packages.config
  SharedLib.Phone.csproj
    packages.config
  SharedLib.SL4.csproj
    packages.config

预期的 nupkg 具有以下结构

SharedLib.1.0.nupkg
  lib/net35/SharedLib.dll
  lib/net40/SharedLib.dll
  lib/sl4-wp/SharedLib.dll
  lib/sl4/SharedLib.dll

nuget.exe pack SharedLib.SL4.csproj会自动确定目标框架为SilverLight4,并将二进制文件放置在lib/sl4中。

我知道我可以添加一个SharedLib.SL4.nuspec文件,并使用<file>部分来包含其他项目的二进制文件,但是否有一种方法可以让nuget自动将组合解决方案输出放入正确的结构中(并从所有项目中检测packages.config中的依赖项?

1个回答

9
目前,除了编写自定义构建脚本将文件放在正确的位置并运行NuGet pack,或采用您所描述的.nuspec方法外,没有其他方法可以实现此功能。
这是我们想要拥有的一个功能,但我们还没有想到一个好的方法来实现它。不过,您的帖子给了我一个想法。
今天,您可以将nuget pack指向.csproj文件。
我们可以考虑一种方法,允许您将其指向.sln文件,如果项目名称遵循某些约定,我们将把所有项目打包成一个单独的包。
如果您真的需要此功能,请考虑在NuGet问题跟踪器中记录问题。 http://nuget.codeplex.com/workitem/list/basic

我可能会这样做,尽管我还没有完全弄清楚我想要什么 :)
  1. 如果能够将NuGet指向一个解决方案并让它自动处理一切就太好了。
  2. 如果生成的包中不同的框架版本可以有不同的依赖关系,那就太好了。例如,WP版本可能需要额外的包来提供WP核心中没有的类型。
我现在会将您的答案标记为已接受,并对此问题进行更深入的思考。
- Jesper Larsen-Ledet
4
在 .sln 文件上运行 nuget pack 将会很方便。我想打包一组相关的程序集到一个单独的包中,以便于管理,而不是分别打包成多个包。它们彼此之间没有依赖关系。 - PenFold
2
这是一个巨大的胜利,因为对于构建服务器来说,它非常方便用于构建和发布单个项目的软件包,但当你需要上述功能时,它会变成一场噩梦。对我来说,还有一些关键的故事缺失,使整个功能变得多余。谁不需要为每个CLR打包呢? - Luke Puplett
这个还没有支持吗? - Philip Pittle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接