【问题标题】:"Go To Definition" in Visual Studio only brings up the MetadataVisual Studio 中的“转到定义”仅显示元数据
【发布时间】:2010-10-24 15:14:57
【问题描述】:

我在 Visual Studio 2008 中的一个 Web 项目中工作。当我按 F12(或右键单击并选择转到定义)时,Visual Studio 始终转到元数据文件而不是转到源。

几点:

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

有没有其他人看到过这种行为和/或知道如何解决它?

【问题讨论】:

标签: visual-studio


【解决方案1】:

嗯,另一位开发人员找到了答案。我们遇到问题的特定项目最初是作为文件引用添加的,然后被删除并添加为项目引用。然而,Visual Studio 将两者都保存在网站的 csproj 文件中,从而导致了问题。他进去手动编辑了csproj文件,去掉了对问题项目的文件引用,现在一切都修复了

【讨论】:

  • 这是很好的信息。我很想知道你们是否安装了 SP1?
  • 好吧,如果我能在网络上的任何地方找到这些信息,我会告诉你的。我正在运行 VS 2008 9.0.21022.8 RTM,但如果我能找到任何对应于 VS 2008 SP1 或原始版本的地方,我会被诅咒的
  • 太好了,谢谢 - 这对我有帮助。如果使用 text/xml 编辑器打开它,它应该是 csproj 文件中的 ProjectReference。应删除任何其他内容。
  • 如果 ProjectReference 中的 GUID 与引用项目中的 ProjectGuid 值不匹配,也会发生这种情况
  • 谢谢!此类问题在 MSVS 中仍然存在
【解决方案2】:

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

但是,如果您安装 ReSharper,即使您使用“浏览”选项卡添加了对 dll/exe 的引用,您也会转到源代码。

【讨论】:

  • 这个。删除了指向 dll 文件路径的引用,并使用“项目”选择而不是文件路径来读取它
【解决方案3】:

看起来它也需要在 Resharper 中进行设置。在 Resharper 中启用之前,我的 Visual Studio 不会导航到 .NET Framework 源代码。

【讨论】:

  • 嗨,它对我有用。它解决了这个问题。使用 VS2015 更新 3,ReSharper 2016.1.2
  • 这项工作无需任何额外的删除或重建工作。谢谢。
  • 谢谢。它适用于带有 Resharper 2019.3.4 的 VS2017 版本 15.9.20。
【解决方案4】:

1.关闭您的解决方案。

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

3.打开您的解决方案。

4.重建您的解决方案。

【讨论】:

  • 这是对我有用的选项。但是,我使用的是 VS2019 RC (16.0.0) 并且必须删除 .vs\{ProjectName}\v16 中的 .sou 文件
  • 也为我清理了它。使用 VS2017,.sou 文件位于多个位置 - “.vs\\v15”,就像 Nick 指出的 VS2019 .sou 文件位于 V16 子目录中一样。请注意,我还有一个“...V14”子目录,显然来自我在升级到 2017 之前在同一解决方案上使用的早期 VS2015。将它们都清理干净,所有问题都消失了。
  • *.suo 不是 .sou 是实际的文件扩展名
  • Visual Studio 2019 相同。关闭解决方案,在文件资源管理器中打开解决方案,搜索 .suo 文件,然后将其全部删除。重新打开解决方案,它又可以工作了。
  • 这个选项对我有用,谢谢。对于 VS2019 删除 vs 文件夹并打开项目
【解决方案5】:

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

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

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

【讨论】:

  • 如 cmets 其他地方所述,如果您运行的是 VS2019,则该目录为 v16。
【解决方案6】:

如果您转移构建项目的位置,Visual Studio 经常会遇到转到元数据而不是您的项目的问题,也就是说,您可能有多个版本来测试。

只需删除引用并立即将其添加回来,一切都会被整理出来。

【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      我已经杀死了所有 VS 实例,删除了 SUO,启动了 sln,它对我有用...

      【讨论】:

      • 我遇到了意外的 msbuild 崩溃,之后出现了包括这个问题在内的各种问题。这解决了这个问题。很奇怪。
      【解决方案9】:

      删除引用 dll,构建(会出错),添加引用(您已删除)然后再次构建...然后您的函数上的 F12 应该可以工作(对我有用)。

      【讨论】:

        【解决方案10】:

        #1

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

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

        如果 App_Code 文件夹中有 ASP.NET“Razor 助手”,Visual Studio 2019 会将其解释为不同的程序集但具有相同的名称,这会隐藏实际的程序集。

        除了将这些帮助程序重写为部分视图或 HTML 帮助程序(如果您计划迁移到 .NET Core,您将不得不这样做)之外,没有其他解决方法。

        在 MS 的网站上查看此解决方法,并请对那里的错误进行投票,以便 MS 修复它

        https://developercommunity.visualstudio.com/solutions/1008795/view.html(请点赞)

        #2

        同一程序集可以在对象浏览器中加载两次的另一个原因是,如果您有一个启动 iis-express 进程并且永远不会正确终止它的单元测试项目。

        【讨论】:

        • #1 这解决了我的问题,谢谢。我相信当我使用灯泡快捷方式或在其中一个项目中更改 .net 版本时,自动代码生成会生成虚假参考。
        【解决方案11】:

        我想出了如何解决我的问题from this post,也许它也适用于你们中的一些人。

        我按照以下步骤操作:

        1. 关闭解决方案。
        2. 删除解决方案的智能感知数据库文件:.ncb
        3. 打开解决方案。
        4. 重建解决方案。

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

        Intellisense、“转到定义”和“查找所有引用”应该会再次起作用。

        【讨论】:

          【解决方案12】:

          就我而言(使用 Visual Studio Professional 2015),当我禁用 XAML 设计器时,F12 停止工作。 恢复更改并重新启动 Visual Studio 后,F12 再次工作。

          多次检查模式以确认,然后发布。希望它可以帮助某人。

          【讨论】:

            【解决方案13】:

            症状:

            在使用“转到定义”或“转到声明”或“查找所有引用”功能时,Visual Studio 2010 Ultimate 反复找不到对函数、#defines、包含等的引用 - 奇怪的是 Intellisense 正在工作。

            修复:

            1. 关闭 Visual Studio
            2. 删除(如果您想保守一点,重命名)解决方案 .sdf 文件
            3. 重新打开 Visual Studio

            .sdf 文件将通过解析解决方案中的包含文件自动重建

            【讨论】:

            • @alestanis 也许这个答案并没有解决每个人的问题。
            • @alestanis 我在 OP 中有问题,但接受的答案对我没有帮助....也许我们应该删除所有有接受答案的问题?
            【解决方案14】:

            对我来说,GUID 解决方案不起作用,我找不到我的 .ncb 文件。 (或者也许我很懒,看起来不够努力,但这并不重要。)重建和重新启动视觉工作室也没有帮助。

            我所做的是关闭 Visual Studio 并删除我的智能感知一直链接到的元数据文件顶部引用的 .dll 和 .pdb。在我的情况下,这意味着我从 Utilities/bin/Release 中删除了我的 .dll 和它的 .pdb 文件。 (Utilities 是我遇到问题的 .dll 项目的名称。)然后我重新启动了 Visual Studio 并重建了 .dll,然后是整个解决方案。没有更多问题了!

            【讨论】:

              【解决方案15】:

              刚刚找到另一个原因。我将我的 Web 项目升级到 4.0,但将类库保留在 2.0。那时,我的解决方案中的所有类库都被视为来自我的 Web 项目的文件引用。可能会帮助别人......

              【讨论】:

                【解决方案16】:

                我遇到了同样的问题,一位同事给了我以下解决方案,它奏效了! 如果以上都不适合你,

                1. 删除所有引用并重新添加它们(确保路径为 正确)
                2. 转到 Solution 属性,然后重新检查项目 所有项目的依赖关系。确保你将成为的项目 using 被添加为您正在工作的项目中的依赖项 开。

                【讨论】:

                  【解决方案17】:

                  我做了所有建议的步骤,但没有任何改变
                  最后 右键单击并添加引用菜单,项目选项卡

                  1. 只需取消选择参考项目。
                  2. 保存解决方案。
                  3. 选择同一个项目。
                  4. 重建解决方案。

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

                  【讨论】:

                    【解决方案18】:

                    以下步骤对我有用。

                    1. 转到 .csproj 文件
                    2. 在记事本中打开它 转到引用 dll 的行。<Reference Include="">
                    3. 删除该行

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

                    【讨论】:

                      【解决方案19】:

                      首先从 Visual Studio 中删除 dll 文件并从解决方案资源管理器手动添加它们 --> 网站 --> 添加 --> 参考并在 IIS 中启用 32 位应用程序为我修复了它。

                      【讨论】:

                        【解决方案20】:

                        VS2017 VB.Net Windows 10 Pro - 我使用一个程序集名称“SharedCollection”,其中包括一个名为 MyGlobals 的 VB 模块。全局变量之一是 FileVersion。引用显示元数据,并且引用它的 Windows 服务具有过时的设置。我尝试了上面的一些 SUO 补救措施,但都没有奏效。

                        成功了

                        我在 References 中删除并重新创建了 ShareCollection 的项目参考。

                        【讨论】:

                          【解决方案21】:
                          1. 点击 VS 中的网站菜单。
                          2. 添加参考...
                          3. 从对话框中单击项目选项卡
                          4. 选择 ddl
                          5. 点击确定按钮

                          【讨论】:

                            【解决方案22】:

                            就我而言,我最近才换了

                            <mvcBuildViews>
                            

                            在我的站点的 .csproj 文件中设置为“true”(在我的 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/ 目录中收到错误。从这些文件中的任何一个(已过期)中,右键单击并选择“转到定义”将为我提供 [元数据] 版本。

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

                            【讨论】:

                              【解决方案23】:

                              我刚刚在 VS 2013 上遇到了这个问题。我可以(做了吗?)无法隔离的事情是更改 CSPROJ 文件中的 GUID。由于 CSPROJ 文件已签入 SVN,因此我无法简单地更改本地开发人员的 GUID。相反,每次发生本地更改时,我都会不断地通过 SVN 还原本地更改。

                              首先,我必须解决更改 GUID 的问题。

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

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

                              4. 通过文本编辑器打开 SLN 文件,而不是 VS。

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

                                Project("{FAE12345-3210-1357-B3EB-00CA4F396F7C}") = "Some.Project", "....\assemblies\Some.Project\Some.Project.csproj", "{B7654321-5321 -4AAE-FE3D-ED20900088ED}" 结束项目

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

                              这应该解决了第一个问题,但没有解决元数据中的“Go to Definition”登陆。在我们的 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. 右键单击新添加项目中的引用并“转到定义”。

                              【讨论】:

                                【解决方案24】:

                                我在所涉及的两个项目之间有一个循环引用(这是一个禁忌)。不得不稍微重构我的代码以解决它,因为这两个项目确实相互依赖。删除其中一个引用解决了智能感知问题。它在逻辑上存在缺陷,如果没有这个错误,我可能不会注意到!

                                【讨论】:

                                  【解决方案25】:

                                  这个对我有用:

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

                                  【讨论】:

                                    【解决方案26】:

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

                                    【讨论】:

                                      【解决方案27】:

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

                                      【讨论】:

                                        【解决方案28】:

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

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

                                        如果有人确切知道为什么会发生这种情况,我很想知道 cmets。

                                        【讨论】:

                                          【解决方案29】:

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

                                          从您的项目中搜索您的程序集名称并将它们全部删除并重新构建。

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2015-05-03
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2021-10-11
                                            • 1970-01-01
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多