Ich habe einen benutzerdefinierten VirtualPathProvider geschrieben (Quelle here), der Inhalt von EmbeddedResources zurückgibt, oder von der Originaldatei, wenn sie erfahren hat, wo sie zu finden ist (damit können Sie bearbeiten und aktualisieren die Dateien ohne neu zu erstellen). Das funktioniert soweit gut.EmbeddedResource-Ansichten können nicht über den benutzerdefinierten VirtualPathProvider geladen werden
Was nicht funktioniert, ist Debuggen. Wenn ich der Ansicht einen Haltepunkt hinzufüge, werden die Symbole nicht geladen. Ich kann sehen, warum das schwierig ist (wie kann der ASP-Compiler wissen, wo die Quelldatei ist, um die Breakpoints zu erkennen?), Aber ich suche nach einer Möglichkeit, den Compiler anzugeben, wo die Quelldatei gefunden werden kann.
Beispielprojekt hier: http://dl.dropbox.com/u/2808109/VppDebugTest.zip
edit:
Ich habe mit einer ASPX-Seite zu experimentieren über das VPP geladen und durch die kompilierte Quelle sehen (mit David Ebbo's technique) und der Linie pragmas erzeugt werden so wie:
Line 275: #line 1 "http://server/EmbeddedPage.aspx"
Line 276: this.InitializeCulture();
Normalerweise werden diese entlang der Linien von
Line 275: #line 1 "d:/somesln/someproj/EmbeddedPage.aspx"
erzeugt
Sie wissen nicht, ob das jemand hilft oder nicht ...
bearbeiten 2:
Nachdem David mir seinen Code geschickt, ich habe einige weitere Untersuchungen durchgeführt und die folgenden Dinge wahr zu sein scheinen:
- Sie können nicht einen Haltepunkt in einer ASPX gesetzt, es sei denn system.web (in VS 2010) verwiesen wird
, wenn Sie eine minimale ASPX-Seite mit den Richtlinien erstellen
<%@ Page Language="C#" %>
und einen Haltepunkt, VS Ich werde bei der Pause anhalten nt in der Quelldateiwenn Sie eine nicht minimal ASPX- mit Richtlinien
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="VppDebugTest.WebForm1" %>
erstellen und einen Breakpoint gesetzt, wenn betrachtet VS werden Sie auf die dissasembly Debug-Ansicht nehmen
--- 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]
Es Ich werde immer noch nicht an irgendwelchen Haltepunkten in den Razor Views anhalten, was ich leider wirklich tun muss! Dieses ASPX-Material kann ein Ablenkungsmanöver sein.
edit:
5: Wenn ich einen Anruf zu Debugger.Break() in mein Index.cshtml setzen, der Debugger bei der Demontage Ansicht stoppt, und es gibt überhaupt keine Pragmas, falsche oder anderweitig
- Wenn ich manuell
@{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" }
in meiner Sicht schreibe, werden die Debugger in der Datei stoppen. Vielleicht ist die Lösung für meinen VPP, die #line-Pragmas in die cshtml-Dateien selbst einzufügen ??
Welche Schritte führen in Ihrem angehängten Projekt zu den Repro? z.B. Wo navigiere ich, wann binde ich an, wo setze ich den BP usw. ein? –
Setze einen Haltepunkt innerhalb von index.cshtml (zB in der @ ViewBag.Message Zeile) und der Debugger wird dort nicht stoppen wenn du rennst das Projekt. Fügen Sie einen Aufruf zu Debugger.Break() hinzu, und Sie erhalten Disassembly, nicht den Quellcode. – mcintyre321
Hmmm, das ist seltsam. Die erzeugte Datei enthält in diesem Fall überhaupt keine Pragmas! Beachten Sie, dass die Codegeneratoren für aspx- und cshtml-Seiten (auch Razor genannt) völlig unterschiedlich sind. Dies könnte ein Problem für Razor sein. –