从Visual Studio浏览.NET Framework源代码

61

这个功能只能在将项目加载到解决方案中,以便 IntelliSense 可以解析它们时才能工作。显然您不希望生成所有 .NET framework 组件的解决方案。 - Hans Passant
链接已损坏,这是 Wayback 版本:https://web.archive.org/web/20150822081658/http://blogs.msdn.com:80/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx - Andrew Keeton
7个回答

28

12
是的,这是一个很好的功能,但它显示的是反编译代码,而不是原始的源代码(在线可用)。 - Xavier Poinas

18

使用 ReSharper,可以启用 ReSharper -> 选项 -> 工具 -> 外部源 -> 导航到源代码,浏览 .NET 源代码。启用此选项后,右键单击类型/方法/其他位置,会出现“导航到 -> 反编译的源代码”新菜单项。对于我来说,也可以通过 F12 进行导航。


2
它只显示接口信息,而不是方法本身的实际源代码(方法内容)。或者我做错了什么? - Xan-Kun Clark-Davis
1
抱歉,我的错。现在它可以工作了。我想我必须重建一下 ;-) 太棒了!现在我可以F12进入.NET源代码! - Xan-Kun Clark-Davis
嗨@Xan-KunClark-Davis,你是如何开始浏览代码的?你是通过ctrl-click类型来实现的吗?我已经重建了项目,但它仍然显示反编译的类。 - Just a learner
@OgrishMan 对不起,我的错。实际上,我看到ReSharper使用下载的符号文件反编译代码。它显示的不仅是接口,但绝对不是真正的源代码(例如:其中没有注释)。再次抱歉给您带来困惑和希望。我认为这应该在答案中澄清。 - Xan-Kun Clark-Davis
安装Resharper之前请注意。这是一款付费工具,虽然有试用期,但使用它需要您使用IntelliJ/社交媒体帐户登录,向他们提供您的电子邮件和个人详细信息,并在第一次运行时同意最终用户许可协议。 - Sollace

17
我刚刚发现了这个扩展程序,基本上解决了我的问题。唯一的问题是它在浏览器中打开源代码而不是在Visual Studio中打开,但这并不是什么大问题,因为即使在浏览器中,您也可以单击源代码导航到类型等。
几天前,在Scott Hanselman的博客上介绍过它:
社区成员和出色的编码者Schabse Laks已经为VS2010、2012和2013创建了一个Visual Studio扩展!当你使用Go To Definition(或按下F12键)时,该扩展会直接将调用发送到在线代码(当它是.NET Framework代码时,而不是你的代码)。
你可以现在下载这个配套的“Ref12”Visual Studio扩展!只需在任何我们有源代码的.NET类型上执行Go To Definition操作,它就会启动你的默认浏览器,让你自己探索.NET Framework源代码!感谢Schabse!
更新:
根据评论,在VS 2022和.NET Core中,请使用该扩展的分支:https://marketplace.visualstudio.com/items?itemName=EfreyKong.Ref12-VS2022

看起来也无法与Web API配合使用。 - War
我可以在我的 Git Hub 源代码中检查 .NET Framework 版本吗? - P Rane
太棒了!我在Visual Studio 2022中安装了Ref12 VS2022,然后点击ASP.NET Core的某个东西并按下F12,就可以进入一个漂亮的在线源代码浏览器,显示出ASP.NET Core的代码。 - Bob.at.Indigo.Health
1
Schabse Laks的原始Github Repo已经多年没有更新了,现在被Efrey Kong fork,并更新了扩展以支持Visual Studio 2022和.Net Core。这个新版本也被命名为Ref12,可以在Visual Studio Marketplace上找到,链接如下: https://marketplace.visualstudio.com/items?itemName=EfreyKong.Ref12-VS2022 - dmcquiggin
很遗憾,Visual Studio 2019不支持.Net Core。 - Péter Szilvási

6
我从这里 http://referencesource.microsoft.com/netframework.aspx 下载了.NET Framework源代码。因为我正在使用.NET 4.0,所以我选择了列表中的“ .Net/4”。(那个列表中的“.NET / 8.0”是什么?我不知道。)我编写了一些脚本来重新组织混乱的源码:
  • 按合理的目录层次结构排列;
  • 删除重复的代码(每个文件为什么都是双倍的,或者我的安装出了问题?);
  • 将所有顶级命名空间重命名为不与内置于Intellisense中的原生命名空间冲突的名称。
  • 例如:System.Windows.Controls -> xSystem.Windows.Controls
然后按照以下步骤操作:
  1. 创建一个类型为“类库”的新Visual Studio项目
  2. 删除所有引用--是的,甚至包括系统引用。
  3. 将所有修改过的.NET代码拖放到您的项目根目录中。
  4. 等待大约30分钟进行VS处理。 VS将似乎冻结,请耐心等待。
Intellisense/ReSharper仍然抱怨许多问题,但现在我可以右键单击并选择“转到声明/实现”。加载此项目后,Visual Studio的大小约为600MB。

1
你能分享你的脚本或最终的.sln文件吗? - Felix
1
是的,分享最终结果会很好,这样其他人就不必做相同“乏味”的重命名等过程了。 - d.popov

5
我正在使用Visual Studio 2013旗舰版。
1.选择菜单:TOOLS \ Extensions and Updates... 2.选择Visual Studio Gallery \ Search Results。搜索词:Ref12
3.下载并安装。
4.重新启动Visual Studio。
5.尝试:单击类或方法上的鼠标,按F12,然后在http://referencesource.microsoft.com/上查看结果。

1
谢谢,但这是我一年前发布的答案的重复。 - Xavier Poinas
@XavierPoinas,没错。然而,这篇文章从另一个角度回答了问题。有些人更喜欢包含步骤图片的答案。而其他人则更喜欢原始文本。 - Péter Szilvási

1

1
当然 - 这就是 VS 在调试模式下使用的(当按照上面链接中的设置时)。但是,当我不在调试时,如何设置 VS 以便它可以找到并显示源代码给我呢? - Xavier Poinas

0

.NET Mass Downloader,但我认为直接回答你的问题是不行的。

然而,我现在看到微软已经使代码更容易下载了。

尽管如此,请注意,即使对于您自己的代码,在不调试时,除非您打开项目,否则VS无法帮助您定位源代码(即使您自己找到它后,在开始调试时断点也会起作用,如果

.pdb文件相应)。


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