根据nuspec reference章节“在版本2.0及更高版本中指定依赖关系”,可以在dependency
元素中声明group
而无需额外的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>
......它完美无瑕。
这是一个错误吗? ~~我是否可能使用空的本地声明覆盖'全局'依赖配置?~~或者我在这里误解了什么?
修改
可以声明空的依赖元素并且仍然具有“全局依赖元素”:https://github.com/dsplaisted/PCLStorage/blob/master/common/PCLStorage.nuspec
答案 0 :(得分:1)
来自Nuget release documentation:
组之间没有继承。如果是项目的目标 framework匹配组的targetFramework属性,只匹配 将安装该组中的依赖项。
这意味着如果项目使用net45
,net40-client
或更高版本 - 将不会安装任何依赖项。
没有group
属性的targetFramework
元素用于安装这些框架的早期版本的依赖项(例如,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>
请注意,组可以包含零依赖项。在上面的例子中, 如果包安装到以Silverlight为目标的项目中 3.0或更高版本,不会安装任何依赖项。如果程序包安装到面向.NET 4.0或更高版本的项目中,则为两个 将安装依赖项,jQuery和WebActivator。如果 package安装到一个针对早期版本的项目中 这两个框架,或任何其他框架,RouteMagic 1.1.0将是 安装。