4

根据nuspec 参考章节“Specifying Dependencies in version 2.0 and above”,可以在没有附加属性的元素dependency中声明 a ,这意味着此依赖项对所有框架都有效。因此,我在 .nuspec 中为我的一个包指定了以下内容:grouptargetFramework

<dependencies>
  <group>
    <dependency id="DEPENDENCY" version="1.0.0" />
  </group>

  <group targetFramework="net40-client">
  </group>

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

在我的一个项目中安装软件包后,依赖项根本不存在。既不在项目引用中,也不在packages我的项目根目录中的文件夹中。但是,当这样做时:

<dependencies>
  <group targetFramework="net40-client">
    <dependency id="DEPENDENCY" version="1.0.0" />
  </group>

  <group targetFramework="net45">
    <dependency id="DEPENDENCY" version="1.0.0" />
  </group>
</dependencies>

...它完美地工作。

这是一个错误吗?~~我是否可以用空的本地声明覆盖“全局”依赖配置?~~或者我在这里误解了什么?


编辑

可以声明空的依赖元素并且仍然具有“全局元素”:https ://github.com/dsplaisted/PCLStorage/blob/master/common/PCLStorage.nuspec

4

1 回答 1

1

Nuget 发布文档

组之间没有继承。如果项目的目标框架与组的 targetFramework 属性匹配,则只会安装该组中的依赖项。

这意味着如果项目使用net45,net40-client或更高版本 - 将不会安装任何依赖项。

没有该属性的group元素targetFramework用于安装这些框架的早期版本的依赖项(例如,net20)。

Nuget 发布文档中的一个很好的例子:

<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>

请注意,组可以包含零依赖项。在上面的示例中,如果将包安装到面向 Silverlight 3.0 或更高版本的项目中,则不会安装任何依赖项。如果将包安装到以 .NET 4.0 或更高版本为目标的项目中,则将安装两个依赖项 jQuery 和 WebActivator。如果该软件包安装到针对这两个框架的早期版本或任何其他框架的项目中,则将安装 RouteMagic 1.1.0。

于 2016-01-13T14:19:29.973 回答