VisualStudio 中的“转到定义”只会显示元数据

我在 VisualStudio2008中的一个 Web 项目中工作。当我点击 F12(或者右键单击并选择“转到定义”)时,VisualStudio 会一直转到元数据文件,而不是转到源文件。

注意事项:

  • 所有的源代码都是 C # ,没有 VB.Net
  • 所有项目都在同一个解决方案中
  • 所有内容都是项目引用,而不是文件引用(已检查和再检查)
  • 我已经尝试了 Clean/Rebuild Solution 方法(甚至清除了 Temp 目录、 Clinical ASP.NET Files 目录等)。

有其他人看到过这种行为或者知道如何解决吗?

106860 次浏览

最好的猜测是您没有调试信息。也许您在磁盘上有多个程序集副本,而它没有。PDB 文件。

从项目中搜索程序集名称,然后将其全部删除并重新生成。

如果不将引用作为项目添加,而是使用“添加引用”对话框中的“浏览”选项卡指向 dll 或 exe,就会发生这种情况。如果使用“项目”选项卡添加引用,则应在选择“转到定义”时直接转到源代码。

但是,如果安装 锐利者,即使使用 Browse 选项卡添加对 dll/exe 的引用,也会转到源代码。

另一个开发商找到了答案。我们遇到问题的特定项目最初是作为文件引用添加的,然后移除并作为项目引用添加。但是,VisualStudio 将两者都保存在网站的 csproj 文件中,从而导致了这个问题。他进入并手动编辑 csproj 文件以删除对问题项目的文件引用,现在所有问题都解决了

  1. 从 VS 点击网站菜单。
  2. 添加参考..。
  3. 单击对话框中的“项目”选项卡
  4. 选择 ddl
  5. 点击确定按钮

如果您将项目的构建位置转移到其他位置,Visual Studio 常常会遇到转向元数据而不是转向项目的问题(即您可能有多个版本来测试项目)。

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

我想出了如何解决我的问题 从这个岗位,也许它也会为你们中的一些工作。

我遵循以下步骤:

  1. 关闭溶液。
  2. 删除解决方案的 intellisense 数据库文件: . ncb
  3. 打开溶液。
  4. 重新构建解决方案。

(我相信步骤3或4会在智能感知数据库文件丢失时重新生成该文件)

智能感知、“进入定义”和“查找所有引用”应该会再次起作用。

症状:

Visual Studio 2010 Ultimate 在使用“ Go To Definition”或“ Go To Declaration”或“ Find All References”功能时,多次未能找到对函数、 # Definition、 include 等的引用——奇怪的是,Intellisense 正在工作。

解决方案:

  1. 关闭 VisualStudio
  2. 删除解决方案. sdf 文件(如果希望保守,可以重命名)
  3. 重新开放 Visual Studio

通过解析解决方案中的包含文件,将自动重新生成.sdf 文件

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

对我来说,GUID 解决方案不起作用,我找不到我的。国家刑事调查局的文件。(或许我很懒,没有认真看,但这并不重要。)重建和重新启动视觉工作室也没有帮助。

我所做的就是关闭视觉工作室,删除。DLL 和。Pdb 被引用在元数据文件的顶部,我的智能一直链接到这个文件。在我的情况下,这意味着我删除了我的。DLL 和它的。来自实用程序/bin/Release 的 pdb 文件。(实用程序是。我有问题的 dll 项目)然后,我重新启动了视觉工作室,并重建了。然后把整个解决方案。没有更多的问题!

找到了另一个原因。我把我的 web 项目升级到了4.0,但是把类库升级到了2.0。此时,我的解决方案中的所有类库都被视为 Web 项目中的文件引用。也许能帮到别人。

删除引用 dll,构建(将得到错误) ,添加引用(你删除) ,然后再次构建... F12在你的函数应该工作(为我工作)。

就我而言,我最近刚刚改变

<mvcBuildViews>

“真实”在我的网站的。Csproj 文件(在我的 Razor 视图文件中查找编译错误: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned+compile+errors+on+razor+syntax+error+in+asp+net+web+page+2+) ,然后当我构建时,我从我的站点的/obj/Debug/目录中得到了错误。从这些文件中的任何一个(已经过时) ,右键单击并选择“ Go To Definition”将给出[元数据]版本。

所以对我来说,这里的解决方案都不管用,因为我不是从一个实际上在我的项目中的文件开始的。删除了整个/obj/Debug/目录,错误就消失了,从任何正常的文件中我都可以正确地使用 Go To Definition。

我已经杀死所有的 VS 实例,删除 SUO,启动 SLN,它为我工作..。

我在 VS 2013上遇到了这个问题。我能做的事在 CSPROJ 文件中更改 GUID。由于 CSPROJ 文件已签入 SVN,因此不能简单地更改本地开发人员上的 GUID。相反,每次发生本地更改时,我都不断地向 SVN 还原它。

首先,我必须解决不断变化的 GUID 问题。

  1. 将 CSPROJ 恢复到签入版本。
  2. 通过文本编辑器打开 CSPROJ,而不是 VS。
  3. 从原始 CSPROJ 文件中提取值。

    { B1234567-5123-4AAE-FE43-8465767788ED }

  4. 通过文本编辑器(NOTVS)打开 SLN 文件。

  5. 在解决方案中找到 Project 引用。

    项目(“{ FAE12345-3210-1357-B3EB-00CA4F396F7C }”) = “一些. 项目”,“ ... . 装配一些. 项目一些. 项目. csproj”,“{ B7654321-5321-4AAE-FE3D-ED2090088ED }” EndProject

  6. 列出的第一个 GUID 是解决方案 GUID。对于 SLN 中引用的每个项目,您应该在第一个参数中看到重复此值。后面的 GUID。Csproj 是要用原始 GUID 替换的。

这应该可以解决第一个问题,但是元数据中的“转到定义”着陆问题没有得到解决。在我们的 SLN 文件中,有一个主项目(我们的网站) ,因此它在 SLN 文件中的条目应该包含一个具有多个 GUID 值的 ProjectSection 条目。这里有一个例子:

ProjectSection(ProjectDependencies) = postProject
{AC50D230-24C4-4DCA-BAAD-355E6AF5EFBD} = {AC50D230-24C4-4DCA-BAAD-355E6AF5EFBD}
EndProjectSection

注意,这个集合中缺少的 GUID 来自我的原始项目。

  1. 添加缺少的 GUID 作为 ProjectSection 和 EndProjectSection 之间的最后一个条目。格式显示为每行,格式为{ GUID } = { GUID }。
  2. 保存文件。
  3. 打开你的解决方案。
  4. 右键单击新添加的项目中的引用并“转到定义”

我有一个 循环参照之间的两个项目涉及(这是一个禁忌)。为了解决这个问题,我不得不对我的代码进行一些重组,因为这两个项目是真正相互依赖的。删除其中一个引用解决了智能感知问题。它在逻辑上是有缺陷的,如果没有这个错误,我可能不会注意到!

这个对我很管用:

  1. 右键单击解决方案中参考文件夹中的 dll 探险家
  2. 删除 dll 文件
  3. 然后右键单击 Reference 文件夹
  4. 再次添加对 dll 文件的引用

看起来也需要在 Resharper 安装。我的 VisualStudio 不会导航到。NET 框架源代码,直到我在 Resharper 启用它。

Resharper settings to allow navigate to external source

我遇到了同样的问题,一个同事给了我下面的解决方案,它奏效了! 如果以上方法对你都不管用,

  1. 删除所有引用并重新添加它们(确保路径是 正确)
  2. 转到 解决方案属性,并重新检查项目 所有项目的依赖项。确保您将成为 使用是作为您正在工作的项目中的依赖项添加的 开始。

关闭你的解决方案。

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

打开你的解决方案。

重建你的解决方案。

我做了所有建议的步骤,但什么都没有改变
终于 右击并添加参考菜单、项目选项卡

  1. 简单地取消选择参考项目。
  2. 保存解决方案。
  3. 选择同一个项目。
  4. 重新构建解决方案。

问题解决了,希望这对某人有所帮助。

在我的例子中(使用 VisualStudioProfessional2015) ,当我禁用 XAML 设计器时,F12停止工作。 只要恢复更改并重新启动 VisualStudio,F12就会再次工作。

多次检查模式,确认,然后发布。希望对某些人有所帮助。

对于那些使用 VS2017(我现在的版本是15.3.4)的用户,以下是一些简单的步骤:

  1. 用文件资源管理器打开解决方案并关闭 VisualStudio
  2. 在资源管理器菜单中,选择“查看”并确保“隐藏项目”复选框被标记
  3. 导航到子文件夹 .vs\[your solution name]\v15
  4. 删除 .suo文件
  5. 重新启动 VS 并构建解决方案

这为我解决了这个问题: F12打开了实际的源文件,而不是“来自元数据”的版本。

下面的步骤对我很管用。

  1. 转到.csproj 文件
  2. 在记事本中打开它转到 dll 被引用的那一行
  3. 删掉这行

    <SpecificVersion>False</SpecificVersion>
    or
    <SpecificVersion>True</SpecificVersion>
    

首先从 Visual Studio 中删除 dll 文件,然后从解决方案资源管理器手动添加它们—— > 网站—— > 添加—— > 引用,并在 IIS 中启用32位应用程序后,我修复了这个问题。

如果您试图跳转到已经卸载(不可用)的项目中的定义,就会发生这种情况。右键单击卸载的项目并选择“重新加载项目”。

# 1

选中“ View-Object Browser”,如果您看到多个程序集具有相同的名称,这就是为什么您会得到这个错误。

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

如果在 App_Code文件夹中有 ASP.NET“ Razor helpers”,VisualStudio2019会将其解释为不同的程序集,但使用相同的名称,这将隐藏实际的程序集。

除了将这些帮助程序重写为部分视图或 HTML 帮助程序(如果您计划迁移到。NET 核心)。

在 MS 的网站上看到这个变通方法,请在那里更新错误,以便 MS 修复它

Https://developercommunity.visualstudio.com/solutions/1008795/view.html (请投赞成票)

# 2

在对象浏览器中可以两次加载同一程序集的另一个原因是,如果您有一个单元测试项目,该项目启动了 iis-Express 进程,但从未正确地杀死该进程。

我修改了 .csproj文件,在 Reference-> HinPath 中将 obj 更改为 bin,这样就解决了问题。

VS2017 VB.Net Windows 10 Pro-I 使用程序集名称“ SharedCollection”,其中包括一个名为 MyGlobals 的 VB 模块。其中一个全局变量是 FileVersion。引用显示了元数据,引用它的 Windows 服务的设置已经过时。我已经尝试了以上的一些 SUO 疗法,但没有一个奏效。

这招奏效了

我删除并重新创建了引用中 ShareCollection 的项目引用。

我有这个问题的一个变种,当我加载我的解决方案,我的引用项目有错误,直到我编译了项目,它是引用。这时错误消失了,但是 F12把我带到了元数据。

问题是引用项目中的依赖项与引用项目中的依赖项发生冲突。我从被引用的项目中手动删除了依赖项,直到其中一个解决了引用项目中的错误。之后我能够 F12到实际的代码,并且该项目将加载没有错误。

如果有人确切地知道为什么会发生这种情况,我很有兴趣在评论中知道。

这个小技巧为我解决了这个问题——从解决方案中卸载引用项目,然后重新加载它