38

我正在尝试配置 Visual Studio 2012 以允许我进入 ASP.NET MVC 4.0 源代码。( System.Web.Mvc.dll)。我遵循了 SymbolSource 的推荐配置,但是当我尝试加载符号时,Visual Studio 找不到它们。

推荐配置

要配置 Visual Studio 以使用符号/服务器,请按照以下说明操作:

  1. 转到工具 -> 选项 -> 调试器 -> 常规。
  2. 取消选中“仅启用我的代码(仅限托管)”。
  3. 取消选中“启用 .NET Framework 源单步执行”。是的,它具有误导性,但如果您不这样做,那么 Visual Studio 将忽略您的自定义服务器顺序(请参阅下文)。
  4. 勾选“启用源服务器支持”。
  5. 取消选中“要求源文件与原始版本完全匹配”</li>
  6. 转到工具 -> 选项 -> 调试器 -> 符号。为本地符号/源缓存选择一个文件夹。
  7. 在“符号文件 (.pdb) 位置”下添加符号服务器。请注意正确的顺序,因为某些服务器可能包含相同二进制文件的符号:有或没有源。我们推荐以下设置:

我知道源代码在 CodePlex上可用,但是我对使用符号服务器单步执行代码特别感兴趣,而不必从 GAC 中取消引用 Mvc 并引用本地构建的程序集。

有人用 MVC 4.0 成功过吗?

4

7 回答 7

15

只需添加一个提供更多服务的符号服务器,而不仅仅是主要版本。

试试这个,包含大多数次要版本。

http://srv.symbolsource.org/pdb/Public

核实:

以管理员身份运行 VS。

检查是否已将某些内容下载到您的符号缓存目录中。

转到仅选择指定的模块。添加“System.Web.Mvc.dll”

在代码中设置断点。开始调试。当断点在任何 mvc.dll 行上的调用堆栈中单击右键时。验证是否已加载符号。如果已加载,请尝试对一个调用堆栈行进行 dubbleclick 以打开 mvc 源。

回到你遇到麻烦的地方。

于 2012-11-07T05:09:38.367 回答
6

我将对 Luke Gumbley 的回答进行一些改进。

微软试图让开发人员的生活更轻松。每当它发布一个 MVC 版本的安装程序时,也应该有一个可以下载的源。因此人们可以使用源代码来探索安装程序安装了什么,以及调试 MVC。

回到下载 MVC 调试信息的方式。如果您的系统上安装了 MVC4,您的 Visual Studio(我使用 2010)将永远不会尝试从上述服务器下载 MVC PDB 文件。在这种情况下,您的 Visual Studio 将在您运行调试器时使用 GAC 中的 MVC。

我已经尝试过 Luke Gumbley 建议的方式。但是,一旦您卸载 MVC,您的 MVC 项目将不会被加载,并且您无法创建新的 MVC 项目,因为模板已经消失。所以请不要卸载MVC。如果这样做,您仍然需要重新安装它。这很浪费时间。

你真正需要做的是退出你的 Visual Studio,运行命令

gacutil /u System.Web.Mvc

然后转到C:\Windows\Microsoft.NET\assembly\GAC_MSIL,删除或重命名有问题的System.Web.Mvc文件夹。在此之后,启动您的 Visual Studio,并从 NuGet 获取 MVC 包。

于 2013-01-16T15:32:13.510 回答
4

我无法直接回答您的问题并为您提供System.Web.Mvc.dll用于 ASP.NET MVC 4.0 的带有符号 (.pdb) 的 URL,但也许我可以帮助您以另一种方式解决问题。

众所周知(例如,请参见此处)Microsoft 在http://aspnetwebstack.codeplex.com/上提供了当前的 .NET 源代码。在帖子中,它描述了如何使用 ASP.NET 的Nightly 版本(代码的当前开发状态​​)。如果您在下载RTM 版本的 ASP.NET 4.5(带有 ASP.NET MVC 4.0)之前没有使用 Git ,您可能更喜欢使用它而不是 Nightly 版本。尽管如此,下载 RTM 版本的完整源代码还是很容易的。您只需要知道 Git 允许将代码副本保存在分支或标记版本中。通过这种方式,您可以访问(并下载)完整代码的某些先前版本。链接例如,为您提供 jQuery 1.8.2 而不是另一个链接,为您提供可能不稳定的最新开发人员版本。所以要下载RTM版本的源代码你只需要选择“v2-rtm”分支然后点击“下载”:

在此处输入图像描述

您可以使用链接直接选择“v2-rtm”分支。

我可以重复一遍,这并不完全符合您的要求,而且我知道编译 ASP.NET 源代码也可能有点棘手,但我决定写下这些信息。如果有人会建议你更好的解决方案,那对我来说也会很有趣。

于 2012-10-31T10:33:12.587 回答
4

我遇到了完全相同的问题(正确的版本,但没有符号),但是经过一天左右的尝试,我已经能够让它工作。这些是对我有用的包罗万象的说明,它们可能包含不必要的步骤:

  1. 注册 SymbolSource 并使用经过身份验证的 URL 表单按照VS 说明进行操作
  2. 使用添加/删除程序卸载所有版本的 MVC
  3. 从 GAC 中删除 MVC 程序集(问题是关于修改 MVC,但 GAC 的答案很好)
  4. 使用 NuGet 删除然后重新安装对您的项目的 MVC 4 引用
  5. 开始调试,打开模块窗口,当它出现时,'Symbols loaded' 就在 System.Web.MVC 旁边。

(在你认为合适的时候重新启动,对我来说,关键的最后一步是重新安装 NuGet 参考)

我的理论是,由于在运行时使用 GAC 库而不是本地引用,因此在搜索符号时找不到符号。通过从 GAC 中删除 MVC,然后重新安装 NuGet 引用,似乎使用了本地引用并找到了符号。这是违反直觉的,因为 System.Web.MVC.dll 文件在 NuGet 和 GAC 之间是二进制等效的,尽管它们的日期不同。

我并不完全相信,因为我试图为 Razor 做同样的事情,但没有奏效。

于 2013-01-03T21:06:34.753 回答
1

我刚刚解决了同样的问题。

问题是存储在 GAC 中的 dll 与 symbolsource.org 上发布的 pdb 不完全对应。符号源上的那个显然对应于通过 Nuget 提供的最新版本,而 GAC 中的那个必须与 .NET Framework 4.5 一起安装。(.Net 在尝试使用本地项目之前使用 GAC 上的任何内容,您可以看到这一点,在调试时,转到 Debug->Windows->Modules,System.Web.Mvc.dll 来自GAC 根据其路径)

我所做的是在 GAC 中包含我的解决方案包文件夹中的 System.Web.Mvc.dll,即通过 Nuget 下载的那个。这可以通过在 VS 命令提示符上使用 gacutil 来完成(以管理员身份运行 VS Cmd)。

您可以检查相同的模块 Windows,右键单击 System.Web.Mvc.dll,然后单击符号加载信息。使用“旧”GAC dll,您会收到类似(部分)的消息

SYMSRV: http ://srv.symbolsource.org/pdb/Public/System.Web.Mvc.pdb/1E540B87149F4031B9CDEACAD8D771231/System.Web.Mvc.pdb未找到

注意这里的子文件夹 1E540B87149F4031B9CDEACAD8D771231 (你的可能不同)

替换最近通过 Nuget 下载的 GAC dll 后,消息为

SYMSRV:来自http://srv.symbolsource.org/pdb/Public的 System.Web.Mvc.pdb :336067 字节

http://srv.symbolsource.org/pdb/Public:从符号服务器下载的符号。

C:\Users\\AppData\Local\Temp\SymbolCache\System.Web.Mvc.pdb\68B2330E48624B6C9DE05BED1C8C320F1\System.Web.Mvc.pdb:符号已加载。

请注意子文件夹 68B2330E48624B6C9DE05BED1C8C320F1,这是在 symbolsource.org 中搜索的正确找到的。

希望这可以帮助

于 2013-06-28T10:24:32.107 回答
1

让我从 ReSharper 提供一个方便的对话框开始,以便随时单步执行代码:

在此处输入图像描述

因此,如果您深入查看源代码,您会看到以下代码屏幕:

在此处输入图像描述

但我开始好奇要手动完成这个。我从正确的 pdb 配置开始:

在此处输入图像描述

之后我收到以下错误:

在此处输入图像描述

接下来我将其复制C:\Users\Andrew\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols\System.Web.pdb\CA49C4332DE847FA967F58AFF370B70E1\System.Web.pdbC:\Users\Andrew\AppData\Local\Temp\SymbolCache\System.Web.pdb(以匹配查找路径)。之后我遇到了这个:

在此处输入图像描述

事实证明,不匹配的构建只适用于浏览源代码,而不是调试。(当前机器有 VS2012 RC,因此 MVC 库不是 RTM)。如果它们匹配,您将成为来源。

我仍然不知道为什么查找路径不适应符号配置。希望这可以帮助。

于 2012-11-04T10:41:39.937 回答
0

这里有一些相关信息:http ://aspnetwebstack.codeplex.com/discussions/399312 在这里:使用 Symbolserver 调试 ASP.NET MVC4 的夜间构建

于 2012-11-15T19:34:18.097 回答