Отладка шаблона T4 в VS 2010 приводит к сбою IDE

Я пытаюсь отладить слегка измененную версию шаблона ADO.NET POCO Entity Generator, используя указания Олег Сыч опубликовал несколько лет назад. Я изменил ключ DbgJITDebugLaunchSetting в соответствии с рекомендациями.

Я получаю диалоговое окно, указывающее, что была достигнута определенная пользователем точка останова. Однако вместо возможности отладки с новым экземпляром VS 2010 исходный экземпляр VS 2010 просто аварийно завершает работу и автоматически перезапускается.

Можно ли отлаживать шаблоны T4 с помощью VS 2010?


person Eric J.    schedule 31.05.2010    source источник


Ответы (5)


в Visual Studio 2010 вам нужно вызвать Debugger.Launch() перед Debugger.Break().

person Oleg Sych    schedule 31.05.2010
comment
Это сделало это до запуска нового экземпляра отладчика, но теперь я получаю No Source Available for Call stack location: 13gocwvx!Microsoft.VisualStudio.TextTemplating9936422A04D1D8AC631D9CB3A394DD16.GeneratedTextTransformation.TransformText() + 0x34 байт. Любые мысли ? - person Eric J.; 01.06.2010
comment
Принимаю, потому что это было частично правильно, но я все еще получаю указанную выше ошибку. - person Eric J.; 03.06.2010

Вместо использования System.Diagnostics.Debugger.Launch(); или Break(), подключите отладчик вручную.

  1. Во втором экземпляре vs2010 откройте шаблон T4, который вы хотите отлаживать (подойдет только файл .tt).
  2. Перейдите в Debug -> Attach to Process и найдите исходный процесс devenv.exe.
  3. Добавьте обычную точку останова (красный шар) в место, где вы хотите начать отладку (во втором vs2010 еще)
  4. Перейдите к оригинальному vs2010, сохраните файл .tt и... бинго! Второй экземпляр vs2010 будет отлаживать ваш шаблон.
person andrecarlucci    schedule 05.01.2011

Окончательное решение, которое работает для меня:

отредактировать:

Ключ (системы x86): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

Ключ (системы x64): HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework

значение: DbgJITDebugLaunchSetting

данные: 0x2

шаблон тт:

<#@ template debug="true" hostSpecific="true"  #>
<# System.Diagnostics.Debugger.Launch(); System.Diagnostics.Debugger.Break(); #>
person psulek    schedule 29.06.2010

Вам также потребуется отладка = истина:

‹@#template debug="true" #> System.Diagnostics.Debugger.Launch(); Отладчик.Перерыв();

http://msdn.microsoft.com/en-us/library/bb126338.aspx

person Tim Fischer    schedule 02.06.2010

Чтобы добавить к решению andrecarlucci, если вы сохраните файл, вам будет предложено перезагрузить его во втором экземпляре Visual Studio, прежде чем вы сможете его отладить. Если вам не нужно вносить дальнейшие изменения, но вам нужно отладить его несколько раз, вам не нужно каждый раз сохранять, чтобы взломать код. Вы можете просто нажать кнопку «Преобразовать все шаблоны» на панели инструментов обозревателя решений в исходном экземпляре Visual Studio.

person Ryan    schedule 11.02.2011