Visual Studio中的“转到定义”仅显示元数据

时间:2009-05-07 21:02:41

标签: visual-studio

我在Visual Studio 2008中的Web项目中工作。当我点击F12(或右键单击并选择Go To Definition)时,Visual Studio始终会转到Meta数据文件而不是转到源。

一些要点:

  • 所有源代码都是C#,有 没有VB.Net
  • 所有项目都是一样的 溶液
  • 是的,一切都是项目 参考(检查和 双重检查)
  • 我尝试过清洁/重建 解决方法(即使到了这一步 清除Temp目录, 临时ASP.NET文件目录, 等)。

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

28 个答案:

答案 0 :(得分:52)

嗯,另一位开发者找到了答案。我们遇到问题的具体项目最初是作为文件引用添加的,然后删除并添加为项目参考。但是Visual Studio保存在网站的csproj文件中,导致问题。他进去并手动编辑了csproj文件以删除对问题项目的文件引用,现在所有内容都已修复

答案 1 :(得分:41)

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

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

答案 2 :(得分:34)

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

Resharper settings to allow navigate to external source

答案 3 :(得分:11)

1。关闭您的解决方案。

2。在您的解决方案的<name of the solution>。sln文件存在的文件夹中删除隐藏的DoTasks。sou文件。

3. 打开您的解决方案。

4. 重建您的解决方案。

答案 4 :(得分:8)

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

只需删除引用并立即将其添加回来,所有内容都将被整理出来。

答案 5 :(得分:8)

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

答案 6 :(得分:6)

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

  1. 在Windows资源管理器中打开解决方案并关闭Visual Studio
  2. 在资源管理器菜单中,选择查看并确保已将“隐藏的项目”复选框标记为
  3. 导航到子文件夹.vs\[your solution name]\v15
  4. 删除.suo文件
  5. 重新启动VS并构建解决方案
  6. 为我修复了它:F12打开了实际的源文件,而不是“from metadata”版本。

答案 7 :(得分:6)

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

答案 8 :(得分:2)

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

我按照以下步骤操作:

  1. 关闭解决方案。
  2. 删除解决方案的intellisense数据库文件:.ncb
  3. 打开解决方案。
  4. 重建解决方案。
  5. (我相信步骤3或4会在缺少intellisense数据库文件时重新生成)

    Intellisense,“去定义”和“找到所有引用”应该再次工作。

答案 9 :(得分:2)

删除引用dll,Build(会得到错误),添加引用(你删除了)然后重新构建......你的函数上的F12应该可以工作(为我工作)。

答案 10 :(得分:2)

就我而言,(使用Visual Studio Professional 2015),当我禁用XAML设计器时,F12停止工作。 只要我还原更改并重新启动Visual Studio,F12就会再次运行。

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

答案 11 :(得分:1)

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

这行得通

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

答案 12 :(得分: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进程,却从不将其杀死。

答案 13 :(得分:1)

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

答案 14 :(得分:1)

以下步骤适合我。

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

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

答案 15 :(得分:1)

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

  1. 简单地取消选择参考项目。
  2. 保存解决方案。
  3. 选择同一个项目。
  4. 重建解决方案。
  5. 问题排序。希望这对某些人有所帮助。

答案 16 :(得分:1)

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

答案 17 :(得分:1)

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

我做的是关闭visual studio并删除我的intellisense保持链接到的Meta Data文件顶部引用的.dll和.pdb。就我而言,这意味着我从Utilities / bin / Release中删除了我的.dll和它的.pdb文件。 (Utilities是我遇到问题的.dll项目的名称。)然后我重新启动了visual studio并重建了.dll然后整个解决方案。没有更多的问题!

答案 18 :(得分:1)

症状:

当使用“转到定义”或“转到声明”或“查找所有引用”功能时,Visual Studio 2010 Ultimate一再未能找到函数,#define,includes等的引用 - 奇怪的是Intellisense正在工作。 / p>

修正:

  1. 关闭Visual Studio
  2. 删除(如果你想保守,请重命名)解决方案.sdf文件
  3. 重新打开Visual Studio
  4. 通过解析解决方案中的包含文件,将自动重建.sdf文件

答案 19 :(得分:0)

这个对我有用:

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

答案 20 :(得分:0)

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

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

答案 21 :(得分:0)

我在所涉及的两个项目之间有一个循环引用(这是禁止的)。不得不重新构建我的代码以解决它,因为两个项目都真正依赖于彼此。删除其中一个引用解决了intellisense问题。这在逻辑上是有缺陷的,如果没有这个错误,我可能不会注意到它!

答案 22 :(得分:0)

我刚刚在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参考。

    项目(&#34; {FAE12345-3210-1357-B3EB-00CA4F396F7C}&#34;)=&#34; Some.Project&#34;,&#34; .... \ assemblies \ Some。 Project \ Some.Project.csproj&#34;,&#34; {B7654321-5321-4AAE-FE3D-ED20900088ED}&#34; EndProject

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

  7. 这应该解决第一个问题,但是&#34;转到定义&#34;登陆元数据并没有解决。在我们的SLN文件中,有一个主项目(我们的网站),因此它在SLN文件中的条目应包含具有多个GUID值的ProjectSection条目。这是一个例子:

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

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

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

答案 23 :(得分:0)

就我而言,我刚刚改变了

<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。

答案 24 :(得分:0)

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

答案 25 :(得分:0)

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

答案 26 :(得分:0)

我修改了$months=@( [PSCustomObject]@{Month='January';Days=31} [PSCustomObject]@{Month='February';Days=28} [PSCustomObject]@{Month='March';Days=31} [PSCustomObject]@{Month='April';Days=30} [PSCustomObject]@{Month='May';Days=31} [PSCustomObject]@{Month='June';Days=30} [PSCustomObject]@{Month='July';Days=31} [PSCustomObject]@{Month='August';Days=31} [PSCustomObject]@{Month='September';Days=30} [PSCustomObject]@{Month='October';Days=31} [PSCustomObject]@{Month='November';Days=30} [PSCustomObject]@{Month='December';Days=31} ) function BlackFriday { param( [Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=0)] [int64] $start, [Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=1)] [int64] $end ) $years=$start..$end $blackfriday=@() foreach ($year in $years) { $array=1..12 foreach ($arra in $array) { $month=0 for ($i=0;$i -lt $arra-1;$i++) { $month+=$months[$i].Days } [int]$ye=$year if ($arra -le 2) { $ye-=1} if ($ye % 4 -eq 0) {$leap=$ye/4} else {while ($ye % 4 -ne 0) {$ye-=1} $leap=$ye/4} if ($ye % 100 -eq 0) {$century=$ye/100} else {while ($ye % 100 -ne 0) {$ye-=4} $century=$ye/100} if ($ye % 400 -eq 0) {$cycle=$ye/400} else {while ($ye % 400 -ne 0) {$ye-=100} $cycle=$ye/400} $leap=$leap-$century+$cycle $date=[int64](($year-1)*365+$month+13+$leap) if ($date % 7 -eq 5) { $name=$months[$arra-1].Month $blackfriday+=[string]"$year, $name 13, Friday" } } } $blackfriday } $start=Read-Host "Input start year" $end=Read-Host "Input end year" BlackFriday $start $end 文件,然后在参考-> HinPath中将obj更改为bin并解决了问题。

答案 27 :(得分:-1)

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

从项目中搜索程序集名称并将其全部删除并重建。