发布NuGet包时,如何确定nuspec文件需添加的依赖及添加时机
NuGet nuspec依赖添加判定规则
必须向nuspec添加依赖的场景
- 你的项目直接引用了第三方库的API/类型(比如代码里显式使用
Newtonsoft.Json.Linq.JObject),且该库不属于目标框架的内置组件:此时必须在nuspec中声明对应的<dependency>节点,否则安装你包的下游项目会因缺失依赖组件出现编译或运行错误。 - 项目依赖的私有内部NuGet包未声明自身依赖:如果你的项目依赖了一个内部开发的包,而这个包没有将Newtonsoft.Json这类依赖写入它自己的nuspec,那么你必须在当前项目的nuspec中补充声明该依赖,避免下游项目出现组件缺失。
- 需要强制下游项目使用特定版本的依赖:比如业务要求必须使用
13.0.3版本的Newtonsoft.Json,而非让NuGet自动选择兼容版本,这时要在nuspec里明确指定版本约束。
无需向nuspec添加依赖的场景
- 依赖是目标框架的内置类库:比如.NET Framework自带的
System.Data等组件,不需要额外声明依赖(注:Newtonsoft.Json不属于任何.NET框架的内置组件,此为通用逻辑示例)。 - 依赖是通过间接引用获取,且上游依赖包已声明该依赖:比如你的项目引用了
Microsoft.AspNet.WebApi.Client这类公共包,而该包已经在自身nuspec中声明了Newtonsoft.Json作为依赖,此时NuGet会自动处理传递依赖,你的项目无需重复添加。 - 已将依赖的程序集直接打包到当前NuGet包中:如果你的项目把Newtonsoft.Json.dll直接包含在包的
lib目录下(不推荐,但旧项目可能采用此方式),此时包本身已包含所需组件,无需在nuspec中声明依赖。
内容的提问来源于stack exchange,提问作者Shay
相关产品推荐
相关产品推荐

