当有两种具有相同名称的类型时,如何消除观察窗口中的类型歧义

在观察窗口中,我正在尝试查看TaskScheduler.Current ,但它显示以下错误:

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

从那以后我的程序就是如此:

  • 这是一个.NET 4.0 exe,它使用mscorlib中的TaskScheduler (CommonLanguageRuntimeLibrary)
  • 通过后期绑定引入dll,引用旧的Reactive Extensions .NET 3.5 System.Threading.dll,它在同一名称空间中也有TaskScheduler

问题:我可以在调试器中使用什么语法来指定我要检查的TaskScheduler的dll?

顺便说一句:我认为在将这两个相同命名的类型带入同一个可执行文件方面没有问题(即没有未定义的行为),对吧?

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

这与global:: – 是一样的,除了在这种情况下你可以用来指定dll别名。

您可以通过在dll引用上自己设置/定义别名来使用它(我认为属性中有别名字段)。

两个具有相同命名空间的不同DLL

我不确定这是否完全适用于您的情况,即如果您能够这样做,但您必须在自己的情况下尝试一下。

编辑:(根据评论)

鉴于具体细节 – 我在调试器中尝试了它。 由于另一个是后期绑定 – 编译器不知道它(当然,因为它不起作用)。

因此,在您的源代码(无论如何您需要进行观察的.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

从那时起,您可以在调试器中引用它 – 但是没有办法放弃手动code editing 。 外部别名是每个’建筑单元’,即文件,所以没有全局。

简而言之,这是我们能做的最好的事情,恕我直言。


并且@JaredPar对此进行了确认
在使用模糊类型时,如何使用Visual Studio调试器的程序集名称限定.NET类型以消除歧义?