Я написал собственный 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:
После того, как Дэвид прислал мне свой код, я провел дополнительное расследование, и следующие вещи кажутся true:
, если вы создаете минимальный файл .aspx с директивами и установите точку останова, VS остановится на точке останова в исходном файле
, если вы создадите не минимальный .aspx с директивами и установите точку останова, при просмотре VS перейдет к представление отладки разборки
--- http://server/WebForm1.aspx ------------------------------- ------------------
0000003a mov ecx,dword ptr [ebp-3Ch]
0000003d вызов 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, отладчик остановится на дизассемблированном представлении, и прагм вообще не будет, неправильных или иных
@{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" }
на мой взгляд, отлаживаемый остановится в файле. Так что, может быть, решение для моего VPP состоит в том, чтобы вставить прагмы #line в сами файлы cshtml ??