Невозможно отладить представления 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??

Ответы на вопрос(2)

Ваш ответ на вопрос