如何调试asp.net mvc 4源代码?

如何调试asp.net mvc 4源代码?,.net,asp.net-mvc,asp.net-mvc-4,visual-studio-debugging,.net,Asp.net Mvc,Asp.net Mvc 4,Visual Studio Debugging,我从这里下载最新的源代码: 1) 将system.web.mvc项目添加到我的解决方案中,包括system.web.mvc项目所依赖的其他项目 2) 将“CollaborativeDesign.WebUI”、“CollaborativeDesign.Domain”、“CollaborativeDesign.UnitTest”项目中system.web.mvc程序集的引用从GAC项目更改为system.web.mvc项目 3) 更改根Web.config文件,如下所示: <!--<

我从这里下载最新的源代码:

1) 将system.web.mvc项目添加到我的解决方案中,包括system.web.mvc项目所依赖的其他项目

2) 将“CollaborativeDesign.WebUI”、“CollaborativeDesign.Domain”、“CollaborativeDesign.UnitTest”项目中system.web.mvc程序集的引用从GAC项目更改为system.web.mvc项目

3) 更改根Web.config文件,如下所示:

<!--<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>-->
<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null">
    <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" namespace="System.Web.Mvc" tagPrefix="mvc" />
    </controls>
</pages>

4) 更改“视图”目录中的Web.config文件,如下所示:

<!--<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>-->
<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null">
    <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" namespace="System.Web.Mvc" tagPrefix="mvc" />
    </controls>
</pages>

5) 当我运行这个项目时,它看起来仍然在使用GAC system.web.mvc.dll,因为当我在“system.web.mvc”项目中的“Controller.cs”文件中设置断点时,它表明它没有为文档加载任何符号,而且我也无法使用mvc源代码的方法

如何调试源代码?
我如何知道加载的system.web.mvc.dll是GAC还是我的本地dll?

根据Microsoft.com上的@Rick.Anderson评论,我已通过执行以下附加步骤来解决此问题: 1>在可视命令行中运行“sn.exe-Vr*,31BF3856AD364E35”

2>将System.Web.Mvc项目中CommonAssemblyInfo.cs中的“AssemblyVersion”和“AssemblyFileVersion”从“4.0.0.0”更改为“4.0.0.1”。重建项目

#if ASPNETMVC
[assembly: AssemblyVersion("4.0.0.1")]
[assembly: AssemblyFileVersion("4.0.0.1")]
[assembly: AssemblyProduct("Microsoft ASP.NET MVC")]
#elif ASPNETWEBPAGES
3>更改根目录中的Web.config文件

<compilation debug="true" targetFramework="4.0">
    <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <!--<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" />-->
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<system.web.webPages.razor>
<!--<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />-->
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="DevTrends.MvcDonutCaching" />
  </namespaces>


4>更改视图目录中的Web.config文件

<compilation debug="true" targetFramework="4.0">
    <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <!--<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" />-->
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<system.web.webPages.razor>
<!--<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />-->
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="DevTrends.MvcDonutCaching" />
  </namespaces>



5>重新启动Asp.net开发服务器。好的,享受源代码吧!感谢@Rick.Anderson-at-Microsoft.com的评论


在中可以找到一种不需要修改MVC源代码的简单方法。下载他们的附件,解压它,并从UAC提升的命令提示符运行它。如果要从GIT(GIT clone)下载最新版本,则可能需要更改views/web.config文件中的引用,以使用3.0.0.0而不是2.0.0.0,使用5.0.0.0而不是4.0.0.0。

我可以使用SkipStrongNames实用程序调试ASP.NET MVC 4源代码,并进行一些项目设置更改。有关详细步骤,请参见我的博客,网址为

,您需要为大会命名,否则GAC将获胜。请参阅@Rick.Anderson-at-Microsoft。com@Rick.Anderson-但System.web.mvc项目的输出System.web.mvc.dll已被强命名为。请看@OwenOu。看起来您将答案编辑到了问题中,但您应该将其作为答案发布。我不确定这是否能正常工作?下面通过sn.exe执行的步骤解决了令牌31BF3856AD364E35要忽略的强名称问题。此外,默认情况下,4.0.0.0程序集位于gac中,这是第一位检查,因此保持在4.0.0.0将使用gac版本,而5.0.0.0将失败,因为该版本不存在-除非我在这里遗漏了什么?我需要将修改后的libs添加到gac中(这样我就不必更新应用程序文件夹中的每个程序集),并将System.Web.Razor绑定重定向到最新版本,否则视图将无法呈现,所以类似于:在我的博客中发布更详细的帖子-