我正在尝试配置Visual Studio 2012以允许我进入ASP.NET MVC 4.0源代码。 (System.Web.Mvc.dll
)。我跟着SymbolSource's recommended configuration但是当我尝试加载符号时,Visual Studio找不到它们。
推荐配置
为符号/服务器配置Visual Studio 使用,请按照以下说明操作:
- 转到工具 - >选项 - >调试器 - >一般
- 取消选中“仅启用我的代码(仅管理)”。
- 取消选中“启用.NET Framework源步进”。 是的,这是误导,但如果你不这样做,那么Visual Studio会 忽略您的自定义服务器订单(请参阅下文)。
- 选中“启用来源” 服务器支持“。
- 取消选中“要求源文件与之完全匹配 原始版本“
- 转到工具 - >选项 - >调试器 - >符号。 选择本地符号/源缓存的文件夹。
- 添加符号服务器 在“符号文件(.pdb)位置”下。注意正确 order,因为某些服务器可能包含相同二进制文件的符号: 有或没有来源。我们建议使用以下设置:
醇>
- http://referencesource.microsoft.com/symbols
- http://srv.symbolsource.org/pdb/Public或经过验证的变体 (见上文)
- http://srv.symbolsource.org/pdb/MyGet或经过身份验证的 变体(见上文)(其他带源代码的服务器)
- http://msdl.microsoft.com/download/symbols(其他符号服务器 没有来源)
我知道源代码可用on CodePlex,但我特别感兴趣的是使用符号服务器进入代码,而不必从GAC中引用Mvc并引用本地构建的程序集。 / p>
有没有人用MVC 4.0做到这一点?
答案 0 :(得分:15)
只需添加一个符号服务器,该服务器只提供主要版本。
试试这个,包含大多数次要版本。
http://srv.symbolsource.org/pdb/Public
验证
以管理员身份运行VS.
检查是否已将某些内容下载到符号缓存目录。
转到仅选择指定的模块。 添加“System.Web.Mvc.dll”
在代码中设置断点。开始调试。 当断点点击任意mvc.dll行的callstack中右键单击时。验证是否已加载符号。 如果加载,请在一个callstack行上尝试dubbleclick打开mvc源。
回到遇到麻烦的地方。
答案 1 :(得分:6)
我将对Luke Gumbley的anwser做一些改进。
Microsoft试图让开发人员的生活更轻松。每当它发布MVC版本安装程序时,也应该有一个Source来下载。因此,人们可以使用源来探索安装程序安装的内容,以及调试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包。
答案 2 :(得分:4)
我无法直接回答您的问题,并为ASP.NET MVC 4.0提供System.Web.Mvc.dll
符号(.pdb)的URL,但我可以帮助您以另一种方式解决问题。 / p>
众所周知(例如,请参阅here)Microsoft在http://aspnetwebstack.codeplex.com/上提供了.NET的当前源代码。在the post中,它描述了如何使用ASP.NET的夜间版本(当前开发人员的代码状态)。如果您在下载 RTM版本的ASP.NET 4.5(使用ASP.NET MVC 4.0)之前没有使用过Git,而您可能更喜欢使用它而不是Nightly版本。然而,下载RTM版本的完整源代码很容易。您只需要知道Git允许在分支或标记版本中保存代码的副本。在这种方式下,您可以访问(并下载)完整代码的某些先前版本。 The link例如为您提供jQuery 1.8.2而不是another link为您提供可能不稳定的最新开发人员版本。因此,要下载 RTM版本的源代码,您只需选择“v2-rtm”分支,然后单击“下载”:
您可以使用the link直接选择“v2-rtm”分支。
我可以重复一遍它不完全是你所要求的我知道编译ASP.NET源代码也可能有点棘手,但我决定写信息。如果有人建议你提供更好的解决方案,对我来说也会很有趣。
答案 3 :(得分:4)
我有完全相同的问题(正确的版本,但没有符号),但经过一天左右的尝试,我已经能够让它工作。这些是对我有用的全部说明,它们可能包含不必要的步骤:
(按照你认为合适的方式重新开始,对我来说关键的最后一步是重新安装NuGet参考)
我的理论是,由于GAC库在运行时优先于本地引用使用,因此在搜索时找不到符号。通过从GAC中删除MVC然后重新安装NuGet引用,似乎使用本地引用并找到符号。这是违反直觉的,因为System.Web.MVC.dll文件在NuGet和GAC之间是二进制等效的,尽管它们的日期不同。
我并不完全相信,因为我试图为Razor做同样的事情,但是没有用。
答案 4 :(得分:1)
首先让我说ReSharper提供了一个方便的对话框,可以随时进入代码:
如果您钻取到源代码,那么您将获得以下代码屏幕:
但我很好奇手工完成这个。我从适当的pdb配置开始:
之后我收到以下错误:
接下来,我将C:\Users\Andrew\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols\System.Web.pdb\CA49C4332DE847FA967F58AFF370B70E1\System.Web.pdb
复制到C:\Users\Andrew\AppData\Local\Temp\SymbolCache\System.Web.pdb
(以匹配查找路径)。之后我遇到了这个:
事实证明,不匹配的构建仅适用于浏览源,而不是调试。 (当前机器具有VS2012 RC,因此MVC库不是RTM)。如果匹配,你就是源头。
我仍然不知道为什么查找路径不适应符号配置。希望这会有所帮助。
答案 5 :(得分:0)
这里有一些相关信息:http://aspnetwebstack.codeplex.com/discussions/399312 在这里:Debug into nightly build of ASP.NET MVC4 using Symbolserver
答案 6 :(得分:0)
我刚刚解决了同样的问题。
问题是存储在GAC中的dll与symbolsource.org上发布的pdb不完全对应。 symbolsource上的那个显然对应于Nuget提供的最新版本,而GAC中的那个必须与.NET Framework 4.5一起安装。 (.Net使用GAC上的任何内容,然后再使用你的proyect本地的任何东西,你可以看到这一点,当调试时,去调试 - > Windows->模块,那里的System.Web.Mvc.dll就是一个来自GAC,根据其路径)
我所做的是在我的解决方案的包文件夹中包含GAC中的System.Web.Mvc.dll,该文件夹是通过Nuget下载的。这可以通过在VS命令提示符下使用gacutil来实现(以管理员身份运行VS Cmd)。
您可以检查相同的模块Windows,右键单击System.Web.Mvc.dll,然后单击符号加载信息。使用“旧”GAC dll,您会收到类似(部分)
的消息请注意子文件夹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中搜索到的子文件夹,是正确找到的。
希望这有帮助