Visual Studio 2015 加载两个版本的程序集时无法计算变量

Visual Studio 2015 fails to evaluate variables when two versions of assembly are loaded

我的 .NET 应用程序可以将同一程序集的多个版本加载到内存中。程序集未签名,但每次编译和加载程序集的新副本时,它都会自动获得一个新的程序集版本(次要部分)。我对类型没有任何问题,因为实例化 ob 对象受控制,所以我知道对象是从哪个程序集创建的。

自 VS 2003 以来一直有效,但在最新的 VS 2015 中,此方案的调试已中断。当只有一个版本的程序集被加载到内存中时一切正常,但是每当加载第二个版本时所有 Locals/Watch windows 都变成空的。并试图评估 QuickWatch 中的任何表达式都会给出编译器异常 "error CS1704: An assembly with the same simple name 'MyAssembly' has already been imported. Try removing one of the references (e.g. 'MyAssembly.dll') or sign them to enable side-by-side."

以下是带有来自 VS2013 和 VS2015 的附加调试器的同一应用程序的屏幕截图(加载两个程序集时):

VS2013 调试器:

VS2015 调试器:

以及从加载的程序集列表中选择的部件:

所以这使得使用 VS 2015 进行调试几乎不可能。

因为最初这是一个编译器错误(我相信这是在 VS 2015 调试器的掩护下使用的)互联网搜索不是很有用。这是我能够找到的与调试器问题相关的唯一 link: Visual Studio Debugger Failing to inspect variables。与我的情况不同的是,内存中有两个程序集是一个错误,而在我的情况下,这是一个意图。

所以现在我正在考虑我的选择。

所以可能有人可以提出更多想法吗?谢谢。

假设这是您所处情况的一个选项,您可以尝试在加载程序集之前重命名 class 或命名空间。

有可以修改汇编文件的库:http://www.codeproject.com/Articles/20565/Assembly-Manipulation-and-C-VB-NET-Code-Injection

这当然假设您在运行时加载程序集和类型。

我找到了解决此问题的方法。 Visual Studio "Debug - Options - General - Use the legacy C# and VB expression evaluator" 中有一个选项,启用它可以恢复以前的调试器行为。

此选项在 VS 2015 Known Issues 中针对不同的调试器问题进行了描述,但也适用于所述情况。

我还向 Microsoft 提交了错误。我不相信他们会对此采取任何措施,但这是 link 以防万一。