未指定 'targetFramework' 属性时,Nuget 不会安装依赖项

Nuget doesn't install dependencies when 'targetFramework' attribute isn't specified

根据 nuspec reference 章节 "Specifying Dependencies in version 2.0 and above",可以在 group 元素中声明 dependency 而无需额外的 targetFramework 属性,这意味着这种依赖性对所有框架都有效。所以我继续在 .nuspec 中为我的一个包指定了以下内容:

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

...它完美无缺。

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


编辑

可以声明空依赖元素并且仍然有 'a global one': https://github.com/dsplaisted/PCLStorage/blob/master/common/PCLStorage.nuspec

来自Nuget release documentation

There is no inheritance between groups. If a project's target framework matches the targetFramework attribute of a group, only the dependencies within that group will be installed.

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

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

来自 Nuget release documentation 的一个很好的例子:

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

Note that a group can contain zero dependencies. In the example above, if the package is installed into a project that targets Silverlight 3.0 or later, no dependencies will be installed. If the package is installed into a project that targets .NET 4.0 or later, two dependencies, jQuery and WebActivator, will be installed. If the package is installed into a project that targets an early version of these 2 frameworks, or any other framework, RouteMagic 1.1.0 will be installed.