2013-04-08 29 views
13

在监视窗口,我想看看TaskScheduler.Current,但它让我看到以下错误:如何消除歧义类型在监视窗口时,有两种类型具有相同的名称

The type 'System.Threading.Tasks.TaskScheduler' exists in both 
'CommonLanguageRuntimeLibrary' and 'System.Threading.dll' 

这是真为我的计划,因为:

  • 这是使用TaskScheduler出mscorlib程序的.NET 4.0 EXE(CommonLanguageRuntimeLibrary)
  • DLL是通过后期绑定带来了它引用一个老无功Extensi ons .NET 3.5 System.Threading.dll,它在同一个命名空间中也有TaskScheduler

问题:我可以在调试器中使用什么语法指定TaskScheduler我要检查的DLL?另外:我假设没有任何问题(即没有未定义的行为),因为这两个相同名称的类型被带入同一个可执行文件中,对吗?

+4

有趣的问题确认!不应该有任何含糊之处;对类型的引用都是通过包含程序集来限定的。但我不知道是否有任何方法来限定调试器中的引用...... – shambulator 2013-04-08 16:43:06

回答

4

我不确定这是否可以通过观察窗口工作(但我不明白为什么它不应该,谁知道) - 但在相同类型的两个dll-s之间消除歧义的方法是使用extern alias

这与global::一样 - 除了在这种情况下,您可以使用指定dll别名。

You can use it by setting/defining alias yourself on the dll reference (I think there is alias field there in the properties).

two different DLL with same namespace

我不知道这是否完全适用于你的情况,即如果你能做到这一点,但你必须要尝试一下在你自己的情况。

编辑:(基于评论)

考虑细节 - 我想在我的调试器。由于另一个是后期绑定 - 编译器不知道它(当然,因为它不会工作)。

因此,在您的源代码中(无论如何您需要做手表的.cs),请在顶部添加例如

using mysystem = global::System.Threading.Tasks.TaskScheduler; 

然后在手表mysystem.Current(我立足在我的例子)

或者......

using mytasks = global::System.Threading.Tasks; 

mytasks.TaskScheduler - 不要紧,真的哪一个真的。

EDIT2:
由于历史原因, - 我有种证实,代码编辑是不可避免的。

1)从项目中删除mscorlib - 项目,设置,构建,高级。

2)手动卸载和编辑项目配置 - 添加mscorlib引用(通过VS添加是不允许的)。还需要另外修复了WPF应用程序(超出范围在这里),

3)添加别名mscorlib程序 - 可以添加多个的,独立的W/,,工作正常,

4)添加extern alias <your alias>

从这一点你可以在调试器中引用它 - 但是没有办法放弃手册code editing。外部别名也是“建筑单元”,即文件,因此没有全局性。

总之,这是我们能做的最好的,恕我直言。


而且从@JaredPar这个
How can I qualify a .NET type with assembly name for Visual Studio debugger to disambiguate while using an ambiguous type?

+0

我没有任何'extern别名'。我直接引用mscorlib。 System.Threading.dll通过后期绑定进入。考虑到这一点,目前尚不清楚你在观察窗口中输入的内容以消除歧义。 – 2013-04-08 20:20:18

+0

尝试'global ::' - 你至少可以在代码中执行以下代码'var current = global :: System.Threading.Tasks.TaskScheduler.Current;'。我仍然不知道其他的dll是否会干扰。 – NSGaga 2013-04-08 20:25:33

+0

啊,我明白了。好吧,我试过'全球:: System.Threading.Tasks.TaskScheduler',但我得到相同的错误信息。这对我来说很合理,因为它们都在全局命名空间中(因为它们不是通过'extern alias'引入的) – 2013-04-08 20:39:57

相关问题