2011-09-27 151 views
14

假设我有以下解决方案,其中多个版本的相同代码都针对不同的框架,我想从中生成一个nuget包。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中的依赖项?

回答

8

不,现在除了编写一个自定义构建脚本,将文件放在正确的位置,然后在其上运行NuGet包,或采取您描述的.nuspec方法之外,目前没有办法做到这一点。

这是我们想要的功能,但没有想到一个好的方法来做到这一点。但是,您的帖子只是给了我一个想法。

今天,您可以将nuget pack指向.csproj文件。

我们可以考虑一种方法,允许您将它指向.sln文件,并且如果项目名称遵循一些约定,我们会将所有项目打包到一个包中。

如果您确实需要此功能,请考虑在NuGet问题跟踪器中记录问题。 http://nuget.codeplex.com/workitem/list/basic

+0

我可能只是做,虽然我没有完全做到搞清楚它是什么,我想:) 1.这将是很好的解决方案,以点的NuGet并将它把事情做好 2.它如果生成的包内的不同框架版本可能具有不同的依赖关系,那将会很好。例如WP版本可能需要额外的软件包来提供不属于WP核心的类型。 我会将您的答案标记为现在已被接受,并考虑在这个问题上多一点。 –

+4

在sln上运行nuget包会很好。我想在一个包中封装一组相关的程序集,使它们比单独的包更容易管理。他们不相互依赖。 – PenFold

+2

这是一个胜利的原因是建立服务器非常方便建立和发布一个单一的项目包,但成为一个噩梦,当你需要上述。对我而言,还有一些关键故事缺失,使得整个功能变得多余。谁*不需要为每个CLR打包? –

相关问题