Невозможно отладить представления EmbeddedResource, загруженные через пользовательский VirtualPathProvider
Я написал собственный VirtualPathProvider (источникВот) который будет возвращать содержимое из EmbeddedResources или из исходного файла, если ему было сказано, где его найти (это позволяет редактировать и обновлять файлы без необходимости перестраивать). Пока все работает нормально.
Что не работает, так это отладка. Если я добавлю точку останова к представлению, он не загрузит символы. Я понимаю, почему это сложно (как ASP-компилятор может узнать, где находится исходный файл, чтобы определить точки останова?), Но я ищу способ подсказки компилятору, где можно найти исходный файл.
Пример проекта здесь:http://dl.dropbox.com/u/2808109/VppDebugTest.zip
редактировать:
Я экспериментировал со страницей ASPX, загруженной через VPP, и просматривал скомпилированный источник (используяТехника Дэвида Эббо), а строчные прагмы генерируются так:
Line 275: #line 1 "http://server/EmbeddedPage.aspx"
Line 276: this.InitializeCulture();
Обычно они создаются в соответствии с
Line 275: #line 1 "d:/somesln/someproj/EmbeddedPage.aspx"
Не знаю, помогает ли это кому-нибудь или нет ...
редактировать 2:
После того, как Дэвид прислал мне свой код, я провел дополнительное расследование, и следующие вещи кажутся верными:
you can't set a breakpoint in a .aspx unless system.web is referenced (in VS 2010)if you create a minimal .aspx page with the directives <%@ Page Language="C#" %>
and set a breakpoint, VS will stop at the breakpoint in the source file
if you create a non minimal .aspx with directives <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="VppDebugTest.WebForm1" %>
and set a breakpoint, when viewed VS will take you to the dissasembly debug view
--- http://server/WebForm1.aspx ------------------------------------------------
0000003a mov ecx,dword ptr [ebp-3Ch]
0000003d call 63EC54F0
00000042 mov dword ptr [ebp-44h],eax
00000045 mov edx,dword ptr ds:[03E62200h]
0000004b mov ecx,dword ptr [ebp-44h]
Это все еще не остановится на любых точках останова в представлениях Razor, что, к сожалению, то, что мне действительно нужно, чтобы быть в состоянии сделать! Это .aspx материал может быть красная сельдь.
редактировать:
5: если я помещу вызов Debugger.Break () в мой Index.cshtml, отладчик останавливается в представлении дизассемблирования, и прагм нет вообще, неверные или нет
If I manually write@{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" }
in my view, the debugged will stop in the file. So maybe the solution is for my VPP to insert the #line pragmas into the cshtml files itself??