在Visual Studio中,“转到定义”只会显示非项目引用的元数据。

19

我有一个C#项目,其中包含对DLL格式的程序集的引用。这些DLL文件的PDB信息位于同一文件夹中。当我按下F12键时,我希望能够查看成员的定义。但实际上,它只会显示元数据,而我并不需要这个。

在调试时,如果我单步执行该方法,VS会进入源代码。但是,如果我按下F12键,它仍然会将我带到元数据。

这里有一个类似的问题,但它只适用于项目引用,并且已接受的解决方案与我的问题无关。

在Visual Studio中,“转到定义”只会显示元数据

总结:

  • 引用的项目是DLL
  • 我有PDB信息
  • 在调试模式下,单步执行会进入源代码
  • F12会带我去元数据
  • 我希望F12可以像调试模式一样带我进入源代码。

编辑:将其添加为“项目”不是一个选项,因为它会增加额外的复杂性,因为我们的解决方案文件引用了大约五个其他项目,这些项目都在单独的源代码控制存储库中。

7个回答

13
在Visual Studio中,展开“引用”部分,选择相关项目的引用(包含您想要进行F12的源代码),右键单击它并选择“删除”。
然后通过右键单击“引用”并选择“添加引用”,在“项目”选项卡下(如果您使用的是VS 2012),选择(或浏览)要添加引用的项目,然后单击“确定”按钮。
这将重新构建引用,您将能够进入被引用项目的源代码。 您需要对解决方案中出现此问题的所有项目执行此操作。
我不知道为什么会发生这种情况,但至少解决问题的方法相当简单。

3
这个问题涉及到只有 DLL 和 PDB 文件,而没有“项目”文件的参考资料。您的答案需要项目文件和完整源代码,这并不适用于这种情况。请直接回答如何处理只有 DLL 和 PDB 文件的情况。 - marknuzz
@JosephWhite,你寻找的问题在这里呢,https://dev59.com/K3RA5IYBdhLWcg3www3D 请赞同那个答案并反对这个被错误分类的回答。当类似但不同的问题被平等对待时,该网站变得不那么有用了。 - marknuzz
不错,兄弟(Y)对我有效 - Scott Allen
FYI:我在VS 2017中也遇到了同样的问题,这个方法解决了它。 - BernieP

8
如果您安装了ReSharper,您应该打开ReSharper选项,并查找“External Sources”。在那里,您可以指定相关选项:
enter image description here

4

看起来这个问题在Visual Studio 2013中已经解决了。将PDB信息放在与DLL相同的文件夹中,当我使用“转到定义”时,它会显示源代码。我没有安装反编译扩展。


2
被引用的DLL是否是您解决方案中的一个项目?我发现当我有该项目的源代码,并且它在我的解决方案中时,Visual Studio可以更轻松地链接到这些代码(而不显示元数据)。
此外,请确保通过“引用”弹出窗口中的“项目”添加引用。
当我遇到此问题时,通常就是这样做的。
希望这可以帮助你!
附注:PDB文件通常仅用于调试(本地和远程),并且不能像您尝试使用它那样用于源代码阅读(“转到定义”)。

1
抱歉,那不是一个选项。我正在寻找解决方案,而不是权宜之计。 - marknuzz
2
很遗憾听到这个消息。祝你在选择的任何事情上好运。然而,这不是一个万能药。许多处于你情况下的人都经常这样做来解决他们的问题。 - Andrew White
我在问题中说,链接问题中的答案与我的问题无关。那个答案本质上与您给出的答案相同。这是一个不同的问题。 - marknuzz

1
解决这个问题的一个方法是使用.NET Reflector、VS或VSPro版本。该程序将修改Visual Studio以提供所需的功能。

http://www.reflector.net/

不幸的是,这需要花费135美元至195美元,这对于每个人来说都不是一个选择。


这可能是最简单的解决方案,尽管它会花费一些钱。Reflector的VS插件允许您F12进入任何引用的DLL,无论是否具有源代码。 - mknopf

-1

我也使用了添加引用作为项目,我的问题已经解决了,而且它运行得很好。实际上,我在这个点上卡了很长时间,最终解决了这个问题。

参考资料 -> 添加参考 -> 解决方案 -> 项目 -> 选择参考

enter image description here


-1

将引用作为项目添加,而不是使用..\bin\Debug\referenceFile.dll

这解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接