3

这是我的问题:

我正在使用一个 DLL 库(不是来自 .NET 框架),它包含一个System带有TupleLazy类的命名空间。

当我尝试编译我的项目时,编译器会抛出一些错误,指出这些类存在于mscorlib.dll另一个 DLL 中。

那么,如何使用 .NET Framework 中的类而不删除对其他 DLL 的引用?

4

3 回答 3

7

如果它们具有相同的命名空间等,那么消除歧义的唯一方法是使用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

于 2012-11-13T13:48:45.470 回答
5

听起来您使用的第三方库是为 .NET 2.0 或 .NET 3.5 设计的。

如果第三方没有为 .NET 4+ 提供 DLL,我会感到非常惊讶-我强烈怀疑您可以替换目标框架版本的 DLL 并重新构建。

于 2012-11-13T13:47:26.190 回答
3

这可能是针对 .NET 2 或 3.5 的库,它为 .NET 4 功能(TupleLazy)添加了自己的实现。查找此库的更新 .NET 4 版本。

于 2012-11-13T13:47:56.320 回答