如何制作依赖NuGet包B但不内嵌它的包A并指定版本范围?
NuGet包依赖配置问题解答
你的想法是否正确?
完全正确。当包A依赖包B时,只要在包A的依赖声明里明确指定包B,使用包A的项目会自动继承这个依赖关系,完全不需要把包B内嵌到包A中。内嵌依赖一般只用于两种场景:一是不想让上层项目感知到这个依赖项,二是需要对依赖包做定制修改后再打包,你的场景显然不需要这么做。
如何在PackageA.csproj中配置依赖?
直接在项目文件里添加PackageReference节点即可,NuGet打包时会自动把这个依赖写入包A的元数据中。示例配置如下:
<Project Sdk="Microsoft.NET.Sdk"> <!-- 其他项目配置(如TargetFramework等) --> <ItemGroup> <!-- 声明对PackageB的依赖 --> <PackageReference Include="PackageB" Version="x.x.x" /> </ItemGroup> </Project>
当用户安装包A时,NuGet会自动下载并安装对应的包B版本,同时在用户的项目中自动添加对包B的引用。
如何指定兼容的包B版本范围?
NuGet支持多种版本范围写法,常用的几种如下:
- 精确版本:
Version="1.2.3",仅依赖1.2.3这一个版本 - 最小版本(向上兼容):
Version=">=1.2.3",允许使用1.2.3及任何更高的版本 - 区间版本:
Version="[1.2.3, 2.0.0)",允许使用1.2.3(包含)到2.0.0(不包含)之间的所有版本,适合限定大版本避免破坏性更新 - 浮动版本:
Version="1.2.*",自动匹配1.2.x系列的最新版本;Version="*"则匹配包B的最新版本
对应到csproj的配置示例:
<!-- 允许使用1.2.3及以上版本的PackageB --> <PackageReference Include="PackageB" Version=">=1.2.3" /> <!-- 限定PackageB版本在1.2.3到2.0.0之间(不含2.0.0) --> <PackageReference Include="PackageB" Version="[1.2.3, 2.0.0)" /> <!-- 自动使用1.2.x系列的最新版本 --> <PackageReference Include="PackageB" Version="1.2.*" />
内容的提问来源于stack exchange,提问作者Alexandre
相关产品推荐
相关产品推荐

