如何在.NET类库项目中隐藏依赖NuGet包的公开类型
配置方案
你想要的效果可以通过SDK风格项目的原生NuGet资产控制配置实现,不需要修改业务代码,也不需要第三方工具。
你提到的Access="Private"是非正式的旧写法,官方支持的标准配置修改方式如下,直接调整你的PackageReference节点即可:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0-windows</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <PackageReference Include="InformationLog" Version="2.1.1"> <ExcludeAssets>compile</ExcludeAssets> <PrivateAssets>analyzers;build;contentFiles</PrivateAssets> </PackageReference> </ItemGroup> </Project>
配置说明
- 核心生效的是
<ExcludeAssets>compile</ExcludeAssets>配置:它会阻断InformationLog包的编译时资产向下游项目传递。也就是说所有引用你类库的项目,在编码阶段完全看不到InformationLog下的Log等任何类型,IDE不会给出对应智能提示,也无法直接调用这些类型,仅能看到你自己类库暴露的PublicClass1等公开类型。 - 该配置没有排除运行时资产,因此下游项目运行时可以正常加载
InformationLog程序集,不会出现运行时类型缺失的错误,完全符合你“保留InformationLog作为依赖、引用项目仍需安装对应NuGet包”的要求。 <PrivateAssets>节点的配置是将InformationLog附带的代码分析器、构建脚本、内容文件等开发类资产限制为仅你的类库项目可用,不会传递到下游项目造成不必要的干扰。
补充说明:如果你后续将自己的类库打包为NuGet包发布,该配置会自动随包生效,下游用户安装你的类库包时,同样无法在编译阶段访问
InformationLog的内部类型。
内容的提问来源于stack exchange,提问作者Nigel
相关产品推荐
相关产品推荐

