未指定 '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.
这意味着如果项目使用 net45
、net40-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.
根据 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.
这意味着如果项目使用 net45
、net40-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.