在Visual Studio中,“转到定义”只会弹出元数据

161

我正在使用Visual Studio 2008开发一个Web项目。当我按F12(或右键单击并选择跳转到定义)时,Visual Studio总是跳转到元数据文件而不是源代码。

一些要点:

  • 所有的源码都是C#,没有VB.Net。
  • 所有项目都在同一个解决方案中。
  • 所有引用都是项目引用,而不是文件引用(已经检查和重复检查)。
  • 我尝试了清理/重新生成解决方案的方法(甚至清空Temp目录、Temporary ASP.NET Files目录等)。

有其他人遇到过这种情况或者知道如何解决吗?


我只在混合解决方案中遇到过这个问题,其中包含不同的引用项目,使用了vb.net和c#。很奇怪 :/ - Bayard Randel
我看到的唯一解决方案在以下网址: http://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html - NotMe
1
对我而言,重启Visual Studio解决了这个问题(在一个多项目解决方案中的.net Core项目内)。 - niico
30个回答

72

另一位开发者找到了答案。我们遇到问题的具体项目最初是以文件引用的方式添加的,然后被删除并作为项目引用添加。但是,Visual Studio在网站的csproj文件中保留了这两个引用,导致出现了问题。他手动编辑了csproj文件,删除了有问题项目的文件引用,现在所有问题都已解决。


好的,如果我能在网上找到那个信息,我会告诉你的。我正在运行VS 2008 9.0.21022.8 RTM,但我找不到任何地方说明它是否对应于VS 2008 SP1或原始版本。 - pfunk
3
如果ProjectReference中的GUID与所引用项目中的ProjectGuid值不匹配,也会发生这种情况。 - David Gardiner
1
谢谢!这些问题在 MSVS 中仍然存在。 - Alex
这对于VS2019 .NET Core仍然是正确的。 - Daniel Lobo
我的是一个项目引用(我之前将其从文件引用更改),但是删除它并重新添加似乎可以让它恢复正常。 - Matt Arnold
显示剩余3条评论

47

看起来还需要在 Resharper 中进行设置。在我启用 Resharper 之前,我的 Visual Studio 不会浏览 .NET Framework 源代码。

Resharper settings to allow navigate to external source


2
嗨,这对我有效。它解决了那个问题。使用VS2015 Update 3,ReSharper 2016.1.2。 - Michal
这个工作正常,没有需要删除或重建的额外努力。谢谢。 - Vaishali
谢谢。在使用Resharper 2019.3.4和VS2017版本15.9.20上,这对我很有效。 - Setyo N

47

如果在“添加引用”对话框中使用“浏览”选项卡指向 DLL 或 EXE 文件,而不是将其作为项目添加引用,则会发生此问题。如果您使用“项目”选项卡添加引用,则在选择“转到定义”时应直接跳转到源代码。

但是,如果安装了ReSharper,即使使用“浏览”选项卡将引用添加到 DLL/EXE,也可以直接跳转到源代码。


这个。删除了指向dll文件路径的引用,并使用“项目”选择重新添加它,而不是文件路径。 - Matthias Herrmann

43

1. 关闭你的解决方案。

2. 在你的解决方案的<name of the solution>.sln文件所在的文件夹中删除隐藏的<name of the solution>.suo文件。

3. 打开你的解决方案。

4. 重新构建你的解决方案。


13
这是适用于我的选项。不过,我正在使用VS2019 RC(16.0.0),需要删除位于.vs{ProjectName}\v16目录下的.sou文件。 - Nick DeVore
1
也为我整理干净了。在使用VS2017时,.sou文件位于多个位置 - “.vs<ProjectName>\v15”,就像Nick指出的VS2019 .sou文件在V16子目录中一样。 请注意,我还有一个“...V14”子目录,显然是我在升级到2017之前使用的早期VS2015。清理了它们两个,所有问题都消失了。 - BRebey
1
*.suo 不是实际的文件扩展名,而是 .sou。 - Mike Cheel
1
在Visual Studio 2019中同样适用。关闭解决方案,打开文件资源管理器中的解决方案,搜索.suo文件并将其全部删除。重新打开解决方案,问题就会得到解决。 - yesman
这个选项对我有用,谢谢。对于VS2019,请删除vs文件夹并打开项目。 - Ashi
显示剩余2条评论

29

对于那些使用VS 2017(我目前使用的是15.3.4版本)的人,以下是简单的步骤:

  1. 在Windows资源管理器中打开你的解决方案,并关闭Visual Studio
  2. 在资源管理器菜单中,选择视图(View),确保勾选了“隐藏项目”复选框
  3. 导航到子文件夹 .vs\[你的解决方案名称]\v15
  4. 删除 .suo 文件
  5. 重新启动VS并构建你的解决方案

这个方法对我很有效:F12会打开实际的源文件,而不是元数据版本。


1
正如在其他评论中所指出的那样,如果您正在运行VS2019,则该目录为v16。 - Otis
2
vs 2022 -> .vs\v17 - Lucas

11

Visual Studio经常存在一个问题,就是如果你在构建项目时更改了位置,它会转到元数据而不是你的项目,也就是说你可能有多个版本以进行测试。

只需删除引用,然后立即将其添加回来,一切都会得到解决。


8
标记的解决方案并不总是有效。您必须确保项目文件中引用的项目GUID是您尝试引用的项目的正确GUID。在某些情况下,Visual Studio允许它们失去同步。您可以使用文本编辑器从项目文件中获取项目GUID。 因此,如果项目A引用项目B。在文本编辑器中打开project B.csproj,从 标记中复制出项目GUID。然后在文本编辑器中打开project A.csproj,并确保您正在使用正确的GUID。在这种情况下搜索项目名称“B”。它应该在 处。将 标记中的GUID替换为正确的GUID。保存并重新加载。 当然,还要确保删除对您项目的基于文件的引用。您只需要项目引用。

6

我关闭了所有的VS实例,删除了.suo文件,然后打开sln文件,这样就可以正常工作了…


我遇到了意外的msbuild崩溃,之后出现了各种问题,包括这个问题。这解决了这个问题。奇怪。 - Chris Lukic

3

移除引用的dll,进行构建(会出现错误),重新添加之前移除的引用,再次进行构建……然后在您的函数上按F12键应该可以工作(对我起作用了)。


3

#1

检查"视图-对象浏览器",如果您看到有多个同名程序集 - 这就是您遇到此错误的原因。

对我们来说,这是VS 2019中的一个错误:

如果你在App_Code文件夹中有ASP.NET "Razor helpers",Visual Studio 2019会将其解释为另一个同名程序集,从而隐藏了实际的程序集。

目前还没有其他修复方法,除非重写那些helper为部分视图或HTML辅助工具(无论如何,如果打算迁移到.NET Core,您都必须这样做)。

请参阅MS站点上的此解决方法,并在那里升级该错误,以便MS修复它。

https://developercommunity.visualstudio.com/solutions/1008795/view.html (请升级)

#2

同一程序集被加载两次到对象浏览器中还有另一个原因,就是如果您有一个单元测试项目,该项目启动iis-express进程并且没有正确终止。


#1 这解决了我的问题,谢谢。我相信当我使用灯泡快捷方式或在一个项目中更改 .net 版本时,自动生成的假引用被生成了。 - Matteo

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