如何調試MVC4的代碼


http://www.yulebiao.com/questions/9952825/how-to-debug-asp-net-mvc-4-source-code  這是網上參考的連接

 

下載了 http://aspnetwebstack.codeplex.com/SourceControl/list/changesets 這上面 .NET 4.0 RTM的源碼,

裝了一個git,然后下載就可以了

git clone https://git01.codeplex.com/aspnetwebstack.git 

時間稍微長了點兒,半個小時吧;

然后里面src全是MVC4的源碼(其實很大一部分都在里面了)

解決反感是runtime.sln的,打開之后,在里面新建一個MVC4的項目,

這里有個問題,我下載的MVC4,在 system.web.mvc項目里Properties\CommonAssembley.cs里,全是5.0.0.0的版本號,

我把他改成了5.0.0.1

#if ASPNETMVC [assembly: AssemblyVersion("5.0.0.1")] [assembly: AssemblyFileVersion("5.0.0.1")] [assembly: AssemblyProduct("Microsoft ASP.NET MVC")] #elif ASPNETWEBPAGES 

然后修改根目錄下的 web.config

 <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

  </appSettings>  這里之所以改成3.0.0.0的原因,是因為在我下載的源碼里,他的版本號就是3.0,

 <runtime>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime> 這里的改成了我自己的版本號

 然后修改view下面的web.config

 <configSections>

    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version= 3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version= 3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version= 3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>  這里修改成了3.0,當然具體是什么,看你自己下載的,但是我覺得大部分應該跟我的是一樣的(環境VS2012,源碼4.0 RTM)
<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version= 5.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">

      <namespaces> 

<pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version= 5.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version= 5.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"

        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 

同樣,修改之(具體是不是不修改也成,我就不知道了,我是按照網上的方法改的,最后的地方,會給出連接大家注意學習吧) 

這樣,配置文件和MVC代碼中的版本號,就修改完了,

然后打開VS2012的命令行,執行

 Run "sn.exe -Vr *,31BF3856AD364E35" in the Visual Command line  (哈哈,你看,我真的是COPY的,原創的東西幾乎沒有)

然后把項目中的system.web.mvc的引用,改到你的MVC4的源碼里的項目,當然,不止這一個,不然會有很多地方報錯的,大致的DLL有 : system.web.razot; system.web.webpages;system.web.webpages.deployment; system.web.webpages.razor; 這里不全沒關系,網頁上會明確提示少哪個的.  

如果出現了一個類型轉換的錯誤:

用戶代碼未處理 System.InvalidCastException
  HResult=-2147467262
  Message=[A]System.Web.WebPages.Razor.Configuration.HostSection 無法強制轉換為 [B]System.Web.WebPages.Razor.Configuration.HostSection。類型 A 源自“System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”(在上下文“Default”中的“C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll”位置處)。類型 B 源自“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”(在上下文“Default”中的“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\49f25bf0\9ce908d5\assembly\dl3\70f2ab4b\b0630cdc_834fce01\System.Web.WebPages.Razor.dll”位置處)。

  Source=System.Web.WebPages.Razor 

這個錯誤,就是我為什么要該system.web.webpages的版本好的原因了; 如果出現其他DLL,大家也可以隨着改一下;

之后,就可以在頁面中隨便加空間,就能看到斷點的執行了,好運;

當然,網上還有個家伙說不用修改源代碼,但是要下載SkipStrongNames的一個東西,但是我點了連接,提示我下載已經移除了,不知道怎么回事,要是有搞定了的同學,也請通知我下哈,學習學習;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM