Depanarea șablonului T4 în VS 2010 blochează IDE

Încerc să depanez o versiune ușor modificată a șablonului ADO.NET POCO Entity Generator folosind instrucțiunile Oleg Sych a publicat acum câțiva ani. Am modificat cheia DbgJITDebugLaunchSetting conform recomandărilor.

Primesc un dialog care indică faptul că un punct de întrerupere definit de utilizator a fost atins. Cu toate acestea, în loc să i se prezinte opțiunea de depanare cu o nouă instanță a VS 2010, instanța originală a VS 2010 se blochează și se repornește automat.

Este posibil să depanați șabloanele T4 cu VS 2010?


person Eric J.    schedule 31.05.2010    source sursă


Răspunsuri (5)


în Visual Studio 2010 trebuie să apelați Debugger.Launch() înainte de Debugger.Break().

person Oleg Sych    schedule 31.05.2010
comment
Asta a făcut până la lansarea unei noi instanțe de depanare, dar acum primesc No Source Available for Call stack location: 13gocwvx!Microsoft.VisualStudio.TextTemplating9936422A04D1D8AC631D9CB3A394DD16.GeneratedTextTransformation.TextTransformation.Text4. ? - person Eric J.; 01.06.2010
comment
Accept pentru că a fost parțial corect, dar încă primesc eroarea de mai sus. - person Eric J.; 03.06.2010

În loc să utilizați System.Diagnostics.Debugger.Launch(); sau Break(), atașați manual depanatorul.

  1. Într-o a doua instanță a vs2010, deschideți șablonul T4 pe care doriți să îl depanați (doar fișierul .tt este bine)
  2. Accesați Debug -> Attach to Process și găsiți procesul original devenv.exe
  3. Adăugați un punct de întrerupere obișnuit (bilă roșie) în locul în care doriți să începeți depanarea (în al doilea vs2010 încă)
  4. Mergeți la versiunea originală vs2010, salvați fișierul .tt și... bingo! A doua instanță a vs2010 vă va depana șablonul.
person andrecarlucci    schedule 05.01.2011

Soluția finală care funcționează pentru mine:

regedit:

Cheie (sisteme x86): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

Cheie (sisteme x64): HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework

valoare: DbgJITDebugLaunchSetting

date: 0x2

șablon tt:

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

De asemenea, aveți nevoie de debug=true:

‹@#template debug="true" #> System.Diagnostics.Debugger.Launch(); Debugger.Break();

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

person Tim Fischer    schedule 02.06.2010

Pentru a adăuga la soluția lui andrecarlucci, dacă salvați fișierul, vi se va solicita să îl reîncărcați în a doua instanță a Visual Studio înainte de a-l putea depana. Dacă nu trebuie să faceți modificări suplimentare, dar trebuie să o depanați de mai multe ori, nu trebuie să salvați de fiecare dată pentru a pătrunde în cod. Puteți face pur și simplu clic pe butonul Transform All Templates din bara de instrumente Solution Explorer în instanța originală a Visual Studio.

person Ryan    schedule 11.02.2011