使用PackageReference时NuGet包在非SDK项目无法解析依赖,SDK项目正常
NuGet包在非SDK风格项目中无法解析依赖问题解决方案
问题根因
非SDK风格项目(多为.NET Framework项目,即便采用PackageReference管理包)对NuGet包的目录结构合规性要求远高于SDK风格项目,你当前的包结构不符合NuGet官方约定,导致非SDK项目无法识别包内的程序集引用。
你当前的包结构如下,存在两处不合规问题:
dog.1.0.0.0 - packages - dog.dll
- 程序集
dog.dll直接放在包根目录,未放入约定的lib\{目标框架代号(TFM)}子目录下。SDK风格项目的NuGet解析逻辑做了兼容性降级处理,可 fallback 到根目录查找程序集,但非SDK项目的解析逻辑只会扫描lib下匹配项目目标框架的子目录,找不到dll自然无法添加引用。 - 根目录的
packages文件夹不属于NuGet官方约定的包内有效目录,不会被解析逻辑识别。如果该文件夹存放的是你当前包依赖的其他NuGet包,不应该直接打包到当前包内,而是需要通过包元数据声明依赖。
修复步骤
- 调整NuGet包目录结构,符合官方约定,示例结构如下:
dog.1.0.0.nupkg(解压后根目录) └── lib ├── net48 // 对应你支持的.NET Framework 4.8目标框架,可替换为实际的TFM │ └── dog.dll └── net6.0 // 对应你支持的.NET 6目标框架,无需支持可删除 └── dog.dll
- 删除包根目录的
packages文件夹,如果dog.dll依赖其他NuGet包,在打包所用的.nuspec文件或者SDK风格类库项目的.csproj文件中添加对应依赖声明,NuGet打包时会自动将依赖信息写入包元数据,安装时会自动拉取对应依赖包。 - 重新打包后安装到非SDK项目测试,即可正常解析依赖。
内容的提问来源于stack exchange,提问作者Darksilence
相关产品推荐
相关产品推荐

