Nie można debugować widoków EmbeddedResource załadowanych przez niestandardowy VirtualPathProvider

Napisałem niestandardowy VirtualPathProvider (źródłotutaj), które zwróci zawartość z EmbeddedResources lub z oryginalnego pliku, jeśli powiedziano mu, gdzie go znaleźć (pozwala to edytować i aktualizować pliki bez konieczności przebudowywania). Jak dotąd działa to dobrze.

To, co nie działa, to debugowanie. Jeśli dodam punkt przerwania do widoku, nie ładuje on symboli. Widzę, dlaczego jest to trudne (w jaki sposób kompilator ASP wie, gdzie jest plik źródłowy, aby wykryć punkty przerwania?), Ale szukam sposobu na wskazanie kompilatorowi, gdzie można znaleźć plik źródłowy.

Przykładowy projekt tutaj:http://dl.dropbox.com/u/2808109/VppDebugTest.zip

edytować:

Eksperymentowałem ze stroną ASPX ładowaną przez VPP i przeglądając skompilowane źródło (używającTechnika Davida Ebbo), a pragmy linii są generowane w ten sposób:

Line 275:              #line 1 "http://server/EmbeddedPage.aspx"
Line 276:              this.InitializeCulture();

Zwykle są one generowane według linii

Line 275:              #line 1 "d:/somesln/someproj/EmbeddedPage.aspx"

Nie wiem, czy to komuś pomaga, czy nie ...

edytuj 2:

Po tym, jak David wysłał mi swój kod, przeprowadziłem dalsze dochodzenie i następujące rzeczy wydają się prawdziwe:

nie możesz ustawić punktu przerwania w .aspx, chyba że odwołuje się do system.web (w VS 2010)

jeśli utworzysz minimalną stronę .aspx z dyrektywami<%@ Page Language="C#" %> i ustaw punkt przerwania, VS zatrzyma się w punkcie przerwania w pliku źródłowym

jeśli utworzysz nie minimalny .aspx z dyrektywami<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="VppDebugTest.WebForm1" %> i ustaw punkt przerwania, podczas oglądania VS przeniesie Cię do widoku debugowania demontażu

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

Nadal nie zatrzyma się przy żadnych punktach przerwania w widokach maszynki do golenia, co jest niestety tym, co naprawdę muszę zrobić! To .aspx może być czerwonym śledziem.

edytować:

5: Jeśli umieściłem wywołanie Debugger.Break () w moim Index.cshtml, debuger zatrzyma się w widoku demontażu i nie ma żadnych pragm, niepoprawnych lub innych

Jeśli ręcznie piszę@{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" } moim zdaniem debugowany zatrzyma się w pliku. Więc może rozwiązaniem dla mojego VPP jest wstawienie pragmów #line do samych plików cshtml?

questionAnswers(2)

yourAnswerToTheQuestion