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


132

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

一些要点:

  • 所有的源代码都是C#,没有VB.Net
  • 所有项目都在同一个解决方案中
  • 一切都是项目参考,而不是文件参考(选中和再次选中)
  • 我尝试了“清理/重建解决方案”方法(甚至清除了Temp目录,Temporary ASP.NET Files目录等)。

有没有其他人看到过此行为和/或知道如何解决此问题?


我在不同引用项目中的vb.net和c#混合解决方案中仅遇到过此问题。奇怪:/
Bayard Randel,2009年


对我来说,重新启动Visual Studio解决了此问题(在多项目解决方案中的.net Core项目上)。
niico

Answers:


59

好吧,另一个开发人员找到了答案。我们遇到问题的特定项目最初是作为文件引用添加的,然后被删除并添加为项目引用。但是,Visual Studio将两者都保留在该网站的csproj文件中,从而引起了问题。他进入并手动编辑了csproj文件,以删除对该问题项目的文件引用,现在所有问题都已修复。


这是很棒的信息。我很想知道你们是否安装了SP1?
NotMe,2009年

好吧,如果我可以在网络上的任何地方找到该信息,我会告诉你。我正在运行VS 2008 9.0.21022.8 RTM,但如果能找到与VS 2008 SP1或原始版本相对应的任何地方,我都会被诅咒
pfunk

太好了,谢谢-这对我有帮助。如果使用text / xml编辑器将其打开,则应为csproj文件中的ProjectReference。任何其他应删除。
Victor Gelmutdinov

3
如果ProjectReference中的GUID与所引用项目中的ProjectGuid值不匹配,也会发生这种情况
David Gardiner 2012年

谢谢!这些问题仍然那种坚持MSVS
亚历克斯

42

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

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


39

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

重新分配设置以允许导航到外部源


1
嗨,对我有用。它解决了这个问题。使用VS2015 Update 3,ReSharper 2016.1.2
Michal

25

1.关闭解决方案。

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

3.打开您的解决方案。

4.重建您的解决方案。


7
这是对我有用的选择。但是,我使用VS2019 RC(16.0.0),并不得不删除.sou文件在.VS \ {项目名} \ V16
尼克·德沃尔

1
也为我清理了。使用VS2017,.sou文件位于多个位置-“ .vs \ <ProjectName> \ v15”,就像Nick指出VS2019 .sou文件位于V16子目录中一样。请注意,我也有一个“ ... V14”子目录,显然是在升级到2017年之前在同一解决方案上使用的较早的VS2015。清除了它们并消除了所有问题。
BRebey

1
* .suo不是.sou是实际的文件扩展名
Mike

1
与Visual Studio 2019中的相同。关闭解决方案,在文件资源管理器中打开解决方案,搜索.suo文件,然后将其全部删除。重新打开解决方案,它可以再次运行。
yesman

此选项对我有用,谢谢。对于VS2019删除VS文件夹,打开项目

21

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

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

那对我来说已经解决了:F12打开了实际的源文件,而不是“ from metadata”版本。


如其他注释中所述,如果您正在运行VS2019,则目录为v16。
奥的斯

10

如果您将位置移至构建项目的位置,Visual Studio通常会遇到转到元数据而不是项目的问题,即,您可能有多个版本可以进行测试。

只需删除引用,然后立即将其重新添加,即可对所有内容进行整理。


8

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


6

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


我发生了意外的msbuild崩溃,此后包括各种问题出现了。这解决了问题。奇怪的。
克里斯·卢基奇

3

删除参考dll,进行构建(将出现错误),添加参考(已删除),然后再次进行构建...然后函数上的F12应该起作用(为我工作)。


2

从这篇文章中找到了解决问题的方法,也许对某些人也可以。

我遵循以下步骤:

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

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

Intellisense,“开始定义”和“查找所有引用”应重新工作。


2

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

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


1

症状:

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

固定:

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

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


2
@alestanis也许这个答案不能解决所有人的问题。
nuzzolilo 2012年

@alestanis我在OP中有问题,但是被接受的答案没有帮助我....也许我们应该删除所有具有被接受的答案的问题?
卡尔,

1

对我来说,GUID解决方案不起作用,我找不到我的.ncb文件。(或者也许我很懒,并且看起来不够努力,但这并不重要。)重建和重新启动Visual Studio也无济于事。

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


1

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


1

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

  1. 删除所有引用并将其重新添加(确保路径正确)
  2. 转到解决方案属性,然后重新检查所有项目的项目依赖关系。确保将要使用的项目作为从属项添加到您正在处理的项目中。

1

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

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

问题已排序。希望这对某些人有所帮助。


1

以下步骤对我有用。

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

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

1

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


1

#1

选中“视图-对象浏览器”,如果看到多个具有相同名称的程序集,这就是为什么出现此错误的原因。

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

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

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

请在MS网站上查看此变通办法,请在此处修正错误,以便MS对其进行修复

https://developercommunity.visualstudio.com/solutions/1008795/view.html(请投票)

#2

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


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

0

就我而言,我最近才改变

<mvcBuildViews>

设置为我网站的.csproj文件中的“ true”(以在Razor视图文件中查找编译错误:http://forums.asp.net/t/1909113.aspx?How + to + have + Visual + Studio + 2012 +返回+ compile + errors + on + razor + syntax + error + in + asp + net + web + page + 2 +),然后在构建时,我从站点的/ obj / Debug /目录中获取错误。从任何这些文件(已过期)中,右键单击并选择“转到定义”将为我提供[元数据]版本。

因此,对我而言,这里的解决方案均无效,因为我不是从项目中实际存在的文件开始的。删除了整个/ obj / Debug /目录,错误消失了,并且从任何普通文件中,我都可以正确使用“转到定义”。


0

我只是在VS 2013上遇到了这个问题。我无法(无法解决)的某件事正在更改CSPROJ文件中的GUID。由于CSPROJ文件已签入SVN,因此我无法简单地在本地开发人员上更改GUID。相反,我一直在SVN每次发生时都还原本地更改。

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

  1. 将CSPROJ还原为签入版本。
  2. 通过文本编辑器NOT VS打开CSPROJ。
  3. 从原始CSPROJ文件中提取值。

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

  4. 通过文本编辑器NOT VS打开SLN文件。

  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。

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

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

请注意,此集合中缺少的GUID是我原始项目中的GUID。

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

0

我在所涉及的两个项目之间有一个循环引用(不可以)。由于两个项目真正相互依赖,因此不得不对我的代码进行一些重组以解决它。删除参考文献之一解决了智能感知问题。从逻辑上讲,它是有缺陷的,没有这个错误,我可能不会注意到!


0

这个为我工作:

  1. 右键单击解决方案资源管理器中参考文件夹中的dll
  2. 删除dll文件
  3. 右键单击“引用”文件夹,然后
  4. 再次添加对dll文件的引用

0

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


-1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.