加载两个版本的程序集时,Visual Studio 2015无法评估变量

use*_*819 5 .net c# debugging .net-assembly visual-studio-2015

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

自从VS 2003以来,这一直在运行,但是在最新的VS 2015中,这个场景的调试被打破了.一切正常,只有单个版本的程序集加载到内存中,但每当加载第二个版本时,所有Locals/Watch窗口都变空.并尝试评估QuickWatch中的任何表达式都会产生编译器异常"错误CS1704:已导入具有相同简单名称'MyAssembly'的程序集.请尝试删除其中一个引用(例如'MyAssembly.dll')或将其签名以启用并排侧".

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

VS2013调试器: VS2013调试器

VS2015调试器: VS2015调试器

以及加载的装配列表中的选定零件: 两个不同版本的装配

所以这使得VS 2015的调试几乎不可能.

由于最初这是一个compliler错误(据我所知,在VS 2015调试器的封面下使用)互联网搜索不是很有用.这是我能找到的唯一与调试器问题相关的链接: Visual Studio Debugger无法检查变量.与我的情况不同的是,在内存中有两个程序集是一个错误,而在我的情况下,这是一个意图.

所以现在我在思考我的选择.

  • 当然,理想情况下,我希望有一些补丁来解决这个问题.但实际上我不确定会发生这种情况.
  • 签名程序集(如编译器所示)不是一个选项,因为程序集是在客户机上生成的,并且无法为它们提供签名密钥.
  • 我可以尝试使用AppDomains来查看调试器是否可以处理程序集加载到不同域时的情况.但即使可能,这对我的应用来说也是一个巨大的(和无计划的)改变.

那么可能有人可以提出更多想法吗?Thnaks.