.NET Core 3.1如何避免引用dll时自动引入第三方依赖
解决方案
你之前使用的
<DisableImplicitFrameworkReferences>配置和你的需求无关,该配置的作用是关闭.NET Core默认隐式引入的框架基础库(如Microsoft.NETCore.App),启用后会缺失基础运行时依赖,所以会抛出netstandard版本相关的错误,请先移除该配置。
实现禁止依赖向上传递的两种方案
方案1:针对单个第三方包单独设置
在原项目的.csproj文件中,找到所有第三方依赖的PackageReference节点,添加PrivateAssets="all"属性,示例如下:
<PackageReference Include="RestSharp" Version="你的版本号" PrivateAssets="all" /> <PackageReference Include="BouncyCastle" Version="你的版本号" PrivateAssets="all" />
该配置的作用是:当前包的编译、运行时资产都不会向上传递给引用了当前项目的上层项目,上层项目必须手动安装对应依赖才能调用相关API。
方案2:全局配置所有依赖默认不传递
如果不想逐个修改包引用,可以在原项目.csproj的PropertyGroup节点中添加全局默认配置,一次性生效于所有第三方包:
<PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <!-- 新增这一行 --> <DefaultPrivateAssets>all</DefaultPrivateAssets> </PropertyGroup>
验证效果
修改完成后重新编译原项目,重新打包/更新引用到TestAPP项目中,此时TestAPP直接调用RestSharp、BouncyCastle的相关API会触发编译报错,只有TestAPP手动安装对应版本的依赖后才能正常编译运行,符合你的预期需求。
内容的提问来源于stack exchange,提问作者Binil Anto
相关产品推荐
相关产品推荐

