【发布时间】:2019-12-21 03:40:36
【问题描述】:
我正在使用 C# 迭代开发支持库,以放入驻留在我的文件系统中的本地 NuGet 存储库中。我注意到,每当我在我的一个库中添加 NuGet 依赖项,然后在我的一个项目中引用该库时,这会自动获得对我的库的所有 NuGet 依赖项的可见性。
这并不总是需要的,因为我的库中的名称可能会与其依赖项中的名称发生冲突。有没有办法隐藏引用库的依赖关系?
示例: 我正在我的库 Lib 中开发一个名为 foo() 的函数,并且该库引用了 NuGet 依赖项 Dep 也包含一个 foo() 函数。现在,如果我在项目 Proj 中引用 Lib,默认情况下会发生的是 Proj 获得对两个 Lib 的可见性em> 和 Dep 并且它可以使用其中任何一个的 foo()。首选行为是 Proj 只看到 Lib.foo()
更新
也许这可以作为依赖问题的一个例子:我在一个项目中同时导入了 iTextSharp 和 BouncyCastle,这行代码给出了编译错误:
Org.BouncyCastle.X509.X509CertificateParser cp;
Org.BouncyCastle.X509.X509Certificate[] chain;
它说 iTextSharp 和 BouncyCastle 都包含 X509CertificateParser 和 X509Certificate 的完全限定名称,这意味着 iTextSharp 指的是 BouncyCastle,任何依次引用 iTextSharp 的人都可以看到它,即使它没有在Visual Studio 中的引用下拉菜单。
【问题讨论】:
-
“我的库中的名称可能与其依赖项中的名称发生冲突” - 即使是完全限定的,即通过命名空间?你能举一个具体的例子来说明你要避免什么吗?
-
我编辑了这个问题。现在清楚了吗?
-
并非如此,因为通常绝对清楚您要调用哪个
foo(),因为它会以实例或类型名称为前缀。你能给出一个真正令人困惑的完整、具体的例子吗? -
老实说,告诉我
Namespaces的问题从未存在过。 -
我和乔恩在一起;我不明白这个问题。 C# 中的方法调用始终由 receiver 显式或隐式限定,接收器要么是标识类型的表达式,要么是计算结果为该类型实例的表达式。怎么可能有一个模棱两可的不合格电话?请向我们展示一个示例,以便我们了解您在此处所说的内容。