2011-02-15 67 views
3

我有我想创建一个Nuget包它具有以下情形库:Nuget是否支持与特定平台绑定的依赖关系?

库编译成不同的版本:

  • 的Silverlight 4.0
  • .NET 4.0
  • 。 net 3.5
  • Windows Phone

幸运的是,所有这些平台都受到Nuget的支持,因此在我的软件包的lib文件夹中,我可以为这些平台中的每一个创建子文件夹,并且在图书馆安装在任何平台上时,Nuget都会做正确的事情。

问题是我有一些其他的依赖关系,因平台而异。例如:在Windows Phone上,我需要包含一个第三方zip库(wpSharpLibZip),但这种依赖关系在其他包含压缩实用工具的平台上不存在。

Nuget支持这种情况吗?我希望能够使wpSharpLibZip依赖项仅存在于Windows Phone平台上。我必须为每个平台创建一个单独的包吗?


如果此功能不存在,我能想象它正在实施类似:

更改包清单的部分支持:

<dependencies> 
    <dependency id="Newtonsoft.Json" version="3.5.8" /> 
    <dependency id="wpSharpLibZip"> 
     <platform>Silverlight 4.0 - Windows Phone</platform> 
    </dependency> 
</dependencies> 

或者另一种方式可以是允许在每个平台文件夹内(在lib文件夹下)分开一个单独的.nuspec文件,这可以说明特定于平台的依赖关系。

+1

这已经在CodePlex上的NuGet提交网站作为提案见https://docs.nuget.org/create/nuspec-reference#specifying-dependencies-in-version-2.0-and-above:http://nuget.codeplex.com/workitem/697 – 2011-02-15 20:45:24

回答

4

为每个不同的依赖集合分别打包。依赖关系是包级别。 NuGet目前不支持这种情况,如果有的话可能暂时不支持。

更新:从NuGet 2.x开始,依赖关系具有组,因此您可以通过这种方式设置依赖关系。有关详细信息,

<dependencies> 
    <group> 
     <dependency id="RouteMagic" version="1.1.0" /> 
    </group> 

    <group targetFramework="net40"> 
     <dependency id="jQuery" /> 
     <dependency id="WebActivator" /> 
    </group> 

    <group targetFramework="sl30"> 
    </group> 
</dependencies>