"表达式评估器中的内部错误"

时间:2015-12-31 10:55:15

标签: c# debugging visual-studio-2015

我在Visual Studio 2015的表达式评估程序中遇到了一个问题"表达式评估程序中的内部错误",经过一些调查我发现这是由使用加载的程序集引起的反射。这个程序集不会抛出任何异常,但在此之后,vs exp计算器将失败。 这不是我加载的唯一组件,有一些好的工作组件不会影响评估者。

要解决这个问题,我必须检查菜单>选项>调试>使用托管兼容模式'但这会禁用编辑&继续'功能,我该怎么办?

观察者集会的属性:

  • 其名称与主程序集相同  (我改了名字但没有发生任何事情)
  • 我的所有项目都使用dotNet 4.5
  • 所有根名称空间都相同  (所有组件都是如此)

谢谢!

10 个答案:

答案 0 :(得分:68)

这听起来像表达式评估程序中的错误。为了更好的解决方法,请检查"使用旧版C#和VB表达式评估程序"而不是检查"使用托管兼容模式"。这样您就可以继续使用“编辑并继续”以及最近几个版本中添加的其他功能。

就表达式评估器"中的"内部错误而言,您可以通过转到帮助 - >打开问题吗?发送反馈 - >报告一个问题?这将有助于我们在将来的版本中解决问题。

答案 1 :(得分:28)

延伸 Patrick Nelson 提供的解决方案。对于Visual Studio 2015+,查询步骤如下。

转到工具 - >的选项 VS Options

并在选项下选择调试 - > 常规并向下滚动以查找 ...旧版C#表达式.. 选项:

VS Options Debug Legacy options

此处提供了更多信息:

Switching to Managed Compatibility Mode

注意:切换到传统模式时也会出现一些严重的缺陷。特别是实现的接口的运行时反射几乎变得不可能或非常不方便。还有其他反射方法会抛出错误。

答案 2 :(得分:3)

对我来说,检查“使用托管兼容模式”选项是否有效。当我将鼠标悬停在变量上而不是属性和值

时,我也看到了问号

答案 3 :(得分:1)

在我的情况下,我试图评估List<>上的lambda表达式并有这样的错误(“表达式评估程序中的内部错误”)。我使用的是VS2015,因此允许使用lambda表达式。事实证明表达式评估者缺乏Linq库。我添加了

using System.Linq;

到我现在的班级,瞧! Lambda评估过。

答案 4 :(得分:1)

我在表达式求值程序中遇到了"内部错误"我在发布模式而不是在调试模式下调试时出错。我在发布到生产时将其更改为Release,并忘记将其更改回Debug。

Release Mode

Debug Mode

答案 5 :(得分:1)

我通过转到以下方式重置我的visual studio设置解决了这个问题:转到:工具 - >导入和导出设置并选择重置为默认设置

答案 6 :(得分:1)

我终于弄清楚是什么在我的 Visual Studio 中造成了这个问题!

快速修复是从“Documents/Visual Studio xx/Visualizers”文件夹中删除调试对象收藏夹并重新启动 Visual Studio。

enter image description here 当您在调试器中“固定”一个变量时,Visual Studio 会为其保存一个“最喜欢的”json 对象。

似乎在 Visual Studio 中存在一个错误,它破坏了一些本质上是动态的子变量的“收藏夹”(虽然不完全确定条件)。 enter image description here

答案 7 :(得分:0)

检查您对class User < ApplicationRecord include Merit has_merit has_many :activities, dependent: :destroy has_many :locations, as: :locationable has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :following, through: :active_relationships, source: :followed has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :followers, through: :passive_relationships, source: :follower def follow(other_user) following << other_user end def unfollow(other_user) following.delete(other_user) end def following?(other_user) following.include?(other_user) end class << self def find_for_verfied_token_response(auth,provider,access_token) user = find_or_create_by(uid: auth['id']) if provider == "facebook" user.profile_picture = auth['picture']['data']['url'] elsif provider == "google_oauth2" user.profile_picture = auth['picture'] end user.email = auth['email'] user.full_name = auth['name'] user.gender = auth['gender'] user.provider = provider user.access_token = access_token puts(user) user.save! user end def save_api_key(email,uid,api_key) user = User.where(email: email, id: uid).first user.api_key = api_key user.save! user end end end 属性的使用情况;我在VisualStudio 2017 15.5中找到了一个最小的案例,并将其发布为here

在此特定情况下,表达式计算器(EE)崩溃与应用于覆盖同名字段的属性的[DebuggerBrowsable]属性相关。这将占人们在那里遇到的案例的一些百分比,但在修复之前无法知道有多少是由于这个特定问题所致。

完整且完整的演示示例显示在图像中(并包含在下面以便进行测量)

enter image description here

图像中代码的机器可读副本:

[DebuggerBrowsable]

答案 8 :(得分:0)

在我的情况下,我在2个不同的文件夹中有2个相同的dll文件(似乎,一个dll不正确)。删除.dll和重建解决方案解决了我的问题。

答案 9 :(得分:0)

我在VS2019中遇到了同样的问题。我最终删除了我的Documents / Visual Studio 2019文件夹。希望有一天能对某人有所帮助。花了我一天的时间。

PS。可能不需要删除所有项目,当然也不需要删除您的项目(如果它们在其中),但是就我而言,其中的所有内容都是由VS自动生成的。

我当然尝试了这里提到的所有解决方案,甚至重新安装VS都不起作用。将该类重构为另一个名称是“触发器”,它使我认为尽管清理了符号,但仍然没有任何缓存。