Как отладить исходный код asp.net mvc 4?

Загрузите последний исходный код отсюда: http://aspnetwebstack.codeplex.com/SourceControl/list/changesets

1) добавьте проект system.web.mvc в мое решение, включая другие проекты, от которых зависит проект system.web.mvc.

https://public.blu.livefilestore.com/y1pWkk8-pYVhCxrqVp3WTurqXOI290cw7uGMfrKYoVDARFINGaaYgENPsoj_U1ukH3plg9O29-YiDkxBuSxMv8JWg/1%201.jpg?psid=1

2) измените ссылку на сборку system.web.mvc в проекте "CollaborativeDesign.WebUI", "CollaborativeDesign.Domain", "CollaborativeDesign.UnitTest" из проекта GAC в проект system.web.mvc.

https://public.blu.livefilestore.com/y1phd1RsSEDGBZU_w6ke0NNw19sa51cXXsYTPB05yhKiNYPq_Hr1kdllejvrxMdDjGBHR0H94GOglRvt-1MUAA7ng/2.jpg?psid=1

3) измените файл корневого Web.config следующим образом:

https://public.blu.livefilestore.com/y1pKu-Q0K765sayJazkM8OLmC-r-Kj2lkkq5fs6M0Kl6YwN5CtVvKYFzrmdkyj8oMIboOWPpBnDnt5mabIoAZuhTw/3.jpg?psid=1

https://public.blu.livefilestore.com/y1pi3d9IWgFkCpnornqTMs4OQTBdC2IDL3YL2A51DFdjYE4wFcn_-NYKMjLYtl2PjCYedngHZ5sSblOlFj-zIrnUg/4.jpg?psid=1

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, потому что когда я устанавливаю точку останова в файле "Controller.cs", который находится в "system.web.mvc" ", он показывает, что он не загружает какой-либо символ для документа, и я также не могу войти в метод исходного кода mvc.

https://public.blu.livefilestore.com/y1pgt_xkjJLw3bPFj6R6z2EAyqxCYC4Yk0cfYUe4RCUEkYT9EQPb56CZ1qKVI8_zGBoRe5VcFcRjmNjnc24hFmyDw/5.jpg?psid=1

Как я могу отлаживать исходный код? Как я могу узнать, что загруженный файл system.web.mvc.dll является GAC или моим локальным?

Ответы

Ответ 1

Подписывая комментарий @Rick.Anderson-at-Microsoft.com, я решил эту проблему, выполнив следующие дополнительные шаги:

1 > Запустите "sn.exe -Vr *, 31BF3856AD364E35" в строке Visual Command

2 > Измените "AssemblyVersion" и "AssemblyFileVersion" в CommonAssemblyInfo.cs, который находится в проекте System.Web.Mvc с "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"/>

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <!--<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />-->
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31BF3856AD364E35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.1" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
</assemblyBinding>

4 > Измените файл Web.config в каталоге View

<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>

<!--<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.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
    </controls>
</pages>

5 > Перезапустите сервер разработки Asp.net. Хорошо, наслаждайтесь исходным кодом! Спасибо @Rick.Anderson-at-Microsoft.com за комментарий.

debug image

Ответ 2

Более простой способ, не связанный с модификацией исходного кода MVC, находится в документации исходного кода MVC. Загрузите прикрепленное вложение SkipStrongNames, разархивируйте его и запустите из командной строки с UAC. Если вы потянете последнюю версию с GIT (git clone https://git01.codeplex.com/aspnetwebstack.git), вам может потребоваться изменить ссылки в представлениях /web.config для использования 3.0.0.0 вместо 2.0.0.0 и 5.0.0.0 вместо 4.0.0.0.

Ответ 3

Я могу использовать утилиту SkipStrongNames для отладки исходного кода ASP.NET MVC 4 с некоторыми изменениями параметров проекта. Подробные инструкции см. В моем блоге Отладка исходного кода ASP.NET MVC 4