gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:30:02 25 4
gpt4 key购买 nike

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

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

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

VS2013 调试器: VS2013 Debugger

VS2015 调试器: VS2015 Debugger

以及从加载的程序集列表中选择的零件: Two different versions of an assembly

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

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

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

  • 当然,理想情况下,我希望有一些 VS 2015 补丁可以解决这个问题。但现实一点,我不确定这会发生。
  • 签署程序集(如编译器建议的那样)不是一种选择,因为程序集是在客户的机器上生成的,并且不可能为他们提供签名 key 。
  • 我可以尝试使用 AppDomains,看看调试器是否可以处理程序集加载到不同域时的情况。但即使可以,这对我的应用程序来说也是一个相当大的(并且是计划外的)更改。

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

最佳答案

我已经找到解决此问题的方法。 Visual Studio 中有一个选项“调试 - 选项 - 常规 - 使用旧版 C# 和 VB 表达式计算器”,启用它可以恢复以前的调试器行为。

enter image description here

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

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

关于c# - 加载两个版本的程序集时,Visual Studio 2015 无法评估变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33519111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com