Невозможно выполнить отладку представлений 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:

После того, как Дэвид прислал мне свой код, я провел дополнительное расследование, и следующие вещи кажутся true:

  1. вы не можете установить точку останова в .aspx, если нет ссылки на system.web (в VS 2010)
  2. , если вы создаете минимальный файл .aspx с директивами и установите точку останова, VS остановится на точке останова в исходном файле

  3. , если вы создадите не минимальный .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, отладчик остановится на дизассемблированном представлении, и прагм вообще не будет, неправильных или иных

  1. Если я вручную напишите @{ #line 1 "C:\Users\Harry\Desktop\VppDebugTest\VppDebugTest.Views\Views\Home\Index.cshtml" }на мой взгляд, отлаживаемый остановится в файле. Так что, может быть, решение для моего VPP состоит в том, чтобы вставить прагмы #line в сами файлы cshtml ??

10
задан mcintyre321 5 September 2012 в 23:33
поделиться