如何让用户引用我的C#类库时自动引入其他依赖的对象与类型
问题说明
你在自定义类库中编写了如下按键检测方法:
public bool GetKey(Keys key) { unsafe { return GLFW.GetKey((GLFWwindow*)_windowPtr, key); } }
代码中_windowPtr为IntPtr类型字段,GLFWwindow对应OpenTK.Windowing.GraphicsLibraryFramework.Window类型。测试时发现,调用方如果要使用方法签名中的Keys类型,必须手动添加以下using指令:
using OpenTK.Windowing.GraphicsLibraryFramework;
你需要寻找可行方案,让用户引用你的依赖库时自动引入该命名空间,无需手动添加using。
可实现方案
根据你类库需要兼容的框架版本,可选择以下对应方案:
- C# 10+(.NET 6+)可用:传递式全局Using
这是最简便的方案,直接在你的类库项目(SDK风格)的.csproj文件中添加如下配置,即可将指定命名空间作为全局using自动传递给所有引用方:
配置完成后重新打包类库,所有引用该类库的项目无需手动添加using,即可直接使用<ItemGroup> <!-- 配置Visible="true"即可让该using随依赖传递 --> <Using Include="OpenTK.Windowing.GraphicsLibraryFramework" Visible="true" /> </ItemGroup>Keys类型。该方案仅要求用户使用.NET 6及以上版本SDK编译项目,无其他额外依赖。 - 全版本兼容方案:自定义枚举封装
如果需要兼容C# 9及更早版本(无全局using特性),最稳妥的方式是在你自身类库的公开命名空间下,定义和OpenTK中Keys枚举成员完全一致的自定义公开枚举,在内部调用GLFW接口时做一次枚举值的强转映射即可。这种方案完全不需要用户感知OpenTK的依赖,也不需要添加任何额外using,缺点是需要维护枚举映射关系,后续OpenTK更新Keys枚举成员时需要同步更新自定义枚举。
注意事项
不要尝试通过IDE配置、项目模板之类的方式实现自动using,这类配置依赖用户本地开发环境,无法随NuGet包传递,换环境就会失效。
内容的提问来源于stack exchange,提问作者moloko824
相关产品推荐
相关产品推荐

