Visual Studio 2015 / C# 中按 F12 前往定义时出现错误

34

当我在 Visual Studio 2015 中按 F12 (转到定义) 时,我会收到以下错误信息:

发生了一个或多个错误

我已经尝试过:

  1. 关闭解决方案
  2. 删除 .suo 文件
  3. 重新构建解决方案

但这没能解决问题。

请帮忙解决。


这个有关那些错误的信息吗? - Sayse
如何操作:你试过关掉再打开吗?如果你是指关闭VS并重新启动 - 是的。 关于:它有关于那些错误的任何信息吗?不仅仅是这个标签窗口。 - Martin Baychev
以防万一,尝试使用“工具”|“导入和导出设置”=>“重置所有设置”(在先保存当前设置后)。 - Matthew Watson
我也遇到了这个问题。尝试禁用扩展程序并在安全模式下运行Visual Studio,但目前还没有解决方案。 - Richard
6个回答

29

当尝试访问外部程序集的元数据时,使用C#和制表符而不是空格会出现问题。这可能与插入点的推断位置有关。

enter image description here

其他人已经记录了这个问题

有一些Connect票据在这里这里,以及一个Github问题。此外,这里有一个讨论。

Visual Studio 2015 Update 1

此问题已在Update 1中解决,请安装!

RTM的低效解决方法

选项对话框会记住最后一页,并在随后打开时保留在那里。我有一个快捷键可以快速打开选项窗格(Alt + o)。我暂时改为使用空格,转到定义,然后在进行任何代码更改之前恢复到制表符。这个工作流程并不美观,但VS2015中的Nuget 3.0问题也不美观(至今已经得到改进)。


1
非常令人沮丧,我不明白选项卡与“转到定义”有什么关系。无论如何,感谢您提供的链接。 - vc 74
2
@vc74 点击“转到定义”时,如果用于外部 DLL,则会生成 C# 代码。C# 代码生成器在某种程度上与选项卡设置冲突。 - Edward Brey
2
多么令人尴尬的错误。这样一个基本功能再加上一个极其常见的配置设置,怎么会被测试团队忽略掉,这对我来说完全无法理解。 - John Hargrove
更新1没有解决它。而且仅为C#设置该选项是不够的,您需要为所有涉及的语言设置它(在我的情况下还包括XAML(-> WPF))。然后您需要实际应用它。可以使用诸如Notepad++之类的工具并相应地替换所有文件中的内容,或者您可以使用Visual Studio Power Tools。如果您已安装它并向格式不同的文件添加新行(现在是空格而不是制表符),Power Tools将弹出一个栏,询问您是否要Tabify或Untabify(使用空格)该文件。 - Steffen Winkler

18

VS 2015 Update 1 可以解决这个问题。

我制作了一个扩展,它可以在每次调用 "GoToDefinition" 命令时简单地启用/禁用 "保留标签" 功能,并且似乎有效:GoToDefinition Fix


很遗憾,这种方法对于“查看定义”无效,因为该命令是异步工作的。当你点击Alt+F12时,它只是打开一个新窗口,设置“保持标签”是在一定延迟后使用的。当然,我可以简单地添加Thread.Sleep(),但在某些情况下,即使等待5秒也不够。所以,我还没有找到一个简单的解决方案。 - D. Nesterov
2
致Microsoft:虽然这个扩展程序很不错,但有时选项卡可能无法再次打开。虽然Productivity Power Tools 2015可以帮助尽早发现选项卡不匹配的情况,但实际上推出修复措施是无可替代的。 - Edward Brey
1
微软声称他们已经通过VS 2015 CTP 1修复了这个问题。 - Jurijs Kovzels
@JurijsKovzels >> 看起来并不是这样,我刚刚安装了VS 2015 CTP 1,问题仍然存在:我无法使用Ctrl + F12。实际上,这与键盘快捷键无关,而与“转到声明”有关 - 分配给它的任何键组合都不起作用... - Grengas
@JurijsKovzels 更新1 CTP对我来说确实解决了这个问题。 - Namaste
这个问题在Visual Studio 2017中又出现了。它影响版本15.2。 - ANeves

4

我发现,如果你在 选项 -> 文本编辑器 -> 所有语言 -> 制表符 下设置了 保留选项卡,并且在C#下也是这样的,那么F12Alt + F12就可以正常使用了。


1
很遗憾,这边还是没能解决它 :-( - Zenuka

2

1

现在Visual Studio的漏洞已经修复,这个hack已经没有用了。我将它保留在这里,以防它作为一个样本对于解决类似问题的黑客行为有用。


AutoHotKey来拯救我们了! 不断地与键盘用户体验的恶劣现象作斗争。

以下是如何设置一个脚本,将 Ctrl+F12 绑定到一个键序列,该键序列设置空格缩进、跳转到定义,然后恢复制表符缩进。使用它代替 F12 来查看代码库外的定义:

  1. 安装AutoHotKey
  2. 在任意位置创建一个名为 FixF12.ahk 的文件。将下面的脚本粘贴到其中。
  3. 打开启动文件夹。你可以通过在 Windows Explorer 地址栏中输入 shell:startup 来到达此处。
  4. 右键拖动 FixF12.ahkStartup 并创建一个快捷方式。
  5. 运行快捷方式。

FixF12.ahk 脚本:

#NoEnv
SendMode Input

^F12::
WinGetActiveTitle Title
IfInString Title, Microsoft Visual Studio
{
  Send, ^QC{#} tabs{Enter}
  Sleep, 300
  Send, !p
  Sleep, 300
  Send, {Enter}
  Send, {F12}
  Send, !tO
  Sleep, 300
  Send, !k
  Sleep, 300
  Send, {Enter}
}
else
{
  Send, {^F12}
}

这个脚本是一个黑客工具,带有闪烁的对话框和竞争条件,但它能够完成工作。不要忘记给Connect中的错误报告点赞。希望在更新1之前,微软会发布一个修复程序。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接