Visual Studio中的“转到定义”仅调出元数据

我正在Visual Studio 2008中的Web项目中工作。当我点击F12(或右键单击并select“转到定义”)时,Visual Studio始终转到元数据文件,而不是转到源代码。

几点:

  • 所有的源代码都是C#,没有VB.Net
  • 所有的项目都在相同的解决scheme
  • 是的,一切都是一个项目的参考(检查和双重检查)
  • 我已经尝试了清理/重build解决scheme的方法(甚至清除Temp目录,临时ASP.NET文件目录等)。

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

那么另外一个开发者find了答案。 我们遇到的具体项目最初是作为文件引用添加的,然后作为项目引用删除并添加。 但是Visual Studio保存在网站的csproj文件中,导致了这个问题。 他走进去,手动编辑csproj文件,删除问题项目的文件引用,现在都已经修复了

它发生在你不添加引用作为项目,但指向添加引用对话框中的浏览选项卡的DLL或EXE。 如果您使用“项目”选项卡添加参考,则应在select“转到定义”时直接转到源代码。

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

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

resharper设置允许导航到外部源

视觉工作室经常遇到元数据问题,而不是你的项目,如果你转移你正在build立的项目的位置,即你可能有几个版本来testing的东西。

简单地删除引用,并立即添加回来,一切都将被整理出来。

标记的解决scheme并不总是工作。 您必须确保项目文件中引用的项目GUID是正在尝试引用的项目的正确的GUID。 在某些情况下,Visual Studio允许它们脱离同步。 您可以使用文本编辑器从项目文件中获取项目GUID。 因此,如果项目A引用项目B.在文本编辑器中打开项目B.csproj,从标签复制项目GUID。 然后在文本编辑器中打开项目A.csproj,并确保您使用的是正确的GUID。 在这种情况下search项目名称“B”。 应该是在。 用正确的标签replace标签中的GUID。 保存并重新加载。 当然,也要确保删除基于文件的项目引用。 你只需要项目引用。

我想通过这篇文章解决我的问题,也许它也适用于你们中的一些人。

我遵循这些步骤:

  1. closures解决scheme。
  2. 删除解决scheme的智能感知数据库文件:.ncb
  3. 打开解决scheme。
  4. 重build解决scheme。

(我相信第3步或第4步缺less时会重新生成intellisense数据库文件)

智能感知,“去定义”和“find所有参考”应该再次工作。

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

我杀了所有的VS实例,删除了SUO,启动sln,它为我工作…

症状:

当使用“转到定义”或“转到声明”或“查找所有引用”function时,Visual Studio 2010 Ultimate反复无法find对函数,#定义,包含等的引用 – 奇怪的是智能感知工作正常。

固定:

  1. closuresVisual Studio
  2. 删除(如果你想保守,重命名)解决scheme.sdf文件
  3. 重新打开Visual Studio

.sdf文件将通过parsing解决scheme中的包含文件自动重build

对于我来说,GUID解决scheme不起作用,我无法find我的.ncb文件。 (或者也许我很懒,看起来不够努力,但这并不重要。)重build和重新启动visual studio也无济于事。

我所做的是closures视觉工作室,并删除在元数据文件的顶部引用我的智能感知保持链接的.dll和.pdb。 在我的情况下,这意味着我删除了我的.dll,它是来自Utilities / bin / Release的.pdb文件。 (实用程序是我遇到问题的.dll项目的名称。)然后,我重新启动了visual studio,然后重新构build.dll,然后是整个解决scheme。 没有更多的问题!

刚刚find另一个原因。 我升级了我的web项目到4.0,但离开类库2.0。 那时,我的解决scheme中的所有类库都被视为我的Web项目的文件引用。 可能帮助别人…

1.closures你的解决scheme。

2.删除您的解决scheme的<name of the solution>解决scheme<name of the solution> .sln文件所在的文件夹中隐藏的<name of the solution> .sou文件。

3.打开你的解决scheme。

4.重build您的解决scheme。

  1. 点击VS的网站菜单。
  2. 添加参考…
  3. 从对话框中点击项目选项卡
  4. selectddl
  5. 点击确定button

就我而言,我刚刚变了

 <mvcBuildViews> 

到我的网站的.csproj文件“真实”(在我的剃刀视图文件中find编译错误: http ://forums.asp.net/t/1991111.aspx?How+to+have+Visual+Studio+2012+returned +编译+错误+在+剃刀+语法+错误+在+ ASP + NET +网页+页+ 2 + ),当我然后build立我得到我的网站的/ OBJ /debugging/目录中的错误。 从任何这些文件(这是过时的),右键单击并select“转到定义”会给我的[元数据]版本。

所以对我来说,这里没有任何解决办法,因为我不是从我的项目中实际存在的文件开始的。 删除了整个/ OBJ /debugging/目录,错误消失,从任何正常的文件,我可以正确使用转到定义。

我刚刚在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. 在解决scheme中find项目引用。

    Project(“{FAE12345-3210-1357-B3EB-00CA4F396F7C}”)=“Some.Project”,“…. \ assemblies \ Some.Project \ Some.Project.csproj”,“{B7654321-5321-4AAE- FE3D-ED20900088ED}“EndProject

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

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

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

注意这个集合中缺less的GUID是我原始项目中的GUID。

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

我在两个项目之间有一个循环参考 (这是一个禁止)。 为了解决这个问题,不得不调整我的代码,因为两个项目都是真正相互依赖的。 删除其中一个参考解决了intellisense问题。 这是逻辑上的缺陷,我可能不会注意到没有这个错误!

这个为我工作:

  1. 右键单击解决scheme资源pipe理器中参考文件夹中的dll
  2. 删除dll文件
  3. 然后右键单击Reference文件夹
  4. 再次引用该dll文件

我面临同样的问题,其中一位同事给了我下面的解决scheme,它的工作! 如果以上都不适合你,

  1. 删除所有的引用,并将其添加回来(确保path是正确的)
  2. 转到解决scheme属性,并重新检查所有项目的项目依赖关系。 确保您正在使用的项目作为从属项目添加到您正在处理的项目中。

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

  1. 只需取消select参考项目。
  2. 保存解决scheme。
  3. select相同的项目。
  4. 重build解决scheme。

问题sorting。 希望这对一些人有帮助。

在我的情况下(使用Visual Studio Professional 2015),当我禁用XAMLdevise器时,F12停止工作。 只要我恢复更改,并重新启动Visual Studio,F12再次工作。

检查模式多次确认,然后张贴。 希望它可以帮助别人。

对于那些使用VS 2017(我现在在15.3.4版本)这里是简单的步骤:

  1. 在Windows资源pipe理器中打开您的解决scheme并closuresVisual Studio
  2. 在资源pipe理器菜单中,select查看,并确保“隐藏项目”checkbox被标记
  3. 导航到子文件夹.vs\[your solution name]\v15
  4. 删除.suo文件
  5. 重新启动VS并构build您的解决scheme

这对我来说是固定的:F12打开了实际的源文件,而不是“从元数据”版本。

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

从您的项目中search您的程序集名称,并将其全部删除并重build。