这是我的问题:
我正在使用一个 DLL 库(不是来自 .NET 框架),它包含一个System
带有Tuple
和Lazy
类的命名空间。
当我尝试编译我的项目时,编译器会抛出一些错误,指出这些类存在于mscorlib.dll
另一个 DLL 中。
那么,如何使用 .NET Framework 中的类而不删除对其他 DLL 的引用?
这是我的问题:
我正在使用一个 DLL 库(不是来自 .NET 框架),它包含一个System
带有Tuple
和Lazy
类的命名空间。
当我尝试编译我的项目时,编译器会抛出一些错误,指出这些类存在于mscorlib.dll
另一个 DLL 中。
那么,如何使用 .NET Framework 中的类而不删除对其他 DLL 的引用?
如果它们具有相同的命名空间等,那么消除歧义的唯一方法是使用extern alias
. 在解决方案资源管理器中,Aliases
将此恶意引用的属性更改为其他内容,例如foo
(而不是global
)。
现在,在您需要来自该程序集的类型的类文件中,您必须添加(在最顶部):
extern alias foo;
然后稍后在您可以使用的代码中:
foo::Some.Namespace.TheType
或同样:
foo.Some.Namespace.TheType
基本上,别名成为一个额外的消歧层次。供参考的默认别名是global
. 然而,还要注意,虽然编译器对此很好,但 VS2012 IDE 仍然有一些......扭结:extern alias
https: //connect.microsoft.com/VisualStudio/feedback/details/770464/ide-but-not -compiler-incorrectly-reports-an-error-when-using-extern-alias-to-disambiguate-types
听起来您使用的第三方库是为 .NET 2.0 或 .NET 3.5 设计的。
如果第三方没有为 .NET 4+ 提供 DLL,我会感到非常惊讶-我强烈怀疑您可以替换目标框架版本的 DLL 并重新构建。