System.Data.SqlClient包引用无法在项目引用间传递是何原因
System.Data.SqlClient跨项目引用不传递问题原因及修复方案
常见原因
- PackageReference传递规则限制
如果SqlClientDependent是类库项目,当上层项目目标框架(比如.NET Framework)默认包含GAC版本的System.Data.SqlClient时,构建系统会默认判定无需额外复制Nuget版本的dll到上层项目输出目录,引发版本不匹配或缺失报错。
如果SqlClientDependent项目中System.Data.SqlClient的PackageReference配置了<PrivateAssets>all</PrivateAssets>或包含compile属性,该依赖会被标记为仅当前项目使用,不会向上游传递。 - 目标框架兼容性问题
System.Data.SqlClient本身已停止迭代,仅兼容旧版本.NET Framework和.NET Core/.NET 5+的早期版本,当上下层项目目标框架不一致(比如类库用.NET Standard 2.0,上层用.NET 7+)时,传递逻辑会出现异常。
修复方案
- 检查SqlClientDependent项目.csproj中System.Data.SqlClient的引用配置,移除错误的PrivateAssets设置,可显式配置强制传递:
<PackageReference Include="System.Data.SqlClient" Version="4.8.6"> <PrivateAssets>none</PrivateAssets> </PackageReference>
- 长期兼容方案建议将所有项目中的System.Data.SqlClient替换为官方迭代的
Microsoft.Data.SqlClient包,传递逻辑和多框架兼容性更稳定。 - 临时修复可直接在上层项目中显式安装对应版本的System.Data.SqlClient包,跳过传递依赖判定。
- 检查上层项目的绑定重定向配置,确认没有强制排除System.Data.SqlClient引用的规则。
内容的提问来源于stack exchange,提问作者Easten
相关产品推荐
相关产品推荐

