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

时间:2013-04-08 14:56:34

标签: c# visual-studio-2010

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

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

从那以后我的计划就是如此:

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

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

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

1 个答案:

答案 0 :(得分:4)

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

这与extern alias相同 - 除了在这种情况下你可以用来指定dll别名。

  

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

two different DLL with same namespace

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

编辑:(根据评论)

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

因此,在您的源代码(.cs,无论如何您需要进行观看)中添加顶部例如

global::

然后在观察using mysystem = global::System.Threading.Tasks.TaskScheduler; (我基于我的例子)

或......

mysystem.Current

using mytasks = global::System.Threading.Tasks; - 真的无关紧要。

<强> EDIT2:
由于历史原因 - 我确认代码编辑是不可避免的。

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

2)手动卸载和编辑项目配置 - 添加mscorlib引用(不允许通过VS添加)。 WPF应用程序还需要另一个修复程序(此处超出范围),

3)为mscorlib添加别名 - 你可以添加多个,单独w / mscorlib,这样可以正常工作,

4)添加,

从那时起你可以在调试器中引用它 - 但是没有办法放弃手册extern alias <your alias>。外部别名是每个'建筑单元',即文件,所以没有全局。

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


@JaredPar对此的确认 How can I qualify a .NET type with assembly name for Visual Studio debugger to disambiguate while using an ambiguous type?