SummaryIn VS2010 you can set a breakpoint in code simply by writing a the command System.Diagnostics.Debugger.Launch();.
---
<#@ template debug="true" hostSpecific="true" #>
<#
int i =1
// Now we set a breakpoint in VS2010 via Code
System.Diagnostics.Debugger.Launch(); // This is new in VS2010
#>
In VS2008 you need to make sure registry settings are correct and you can then use the Command System.Diagnostics.Debugger.Break()
Set Value DbgJITDebugLaunchSetting in registry from 0x10 to 0x2
Key (x86 systems): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
Key (x64 systems): HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework
Sample Code for Breakpoint
<#@ template debug="true" hostSpecific="true" #>
<#
int i =1
// Now we set a breakpoint in VS2010 via Code
System.Diagnostics.Debugger.Braek(); // This is how to set breakpoint in VS2008
#>
Long Version:For VS2010/VS2008:1. Make sure your template includes the
debug="true" attribute (see below)
2. Start an external VS to attach to first VS for debugging
On VS 2010 it is better to start another VS instance and attach it to the first as debugger.
Then the tempalte will break at the System.Diagnostics.Debugger.Break() statement when executed in the first VS.
Note that on some machines with VS2010 it is necessary to call System.Diagnostics.Debugger.Launch() before System.Diagnostics.Debugger.Break().
Alternative for VS2008 (Only):The best method to debug a T4 Tempalte is the following.1. Make sure your template includes the
debug="true" attribute (see below)
2. Insert a Call to Debugger.Break where needed
3. Make sure the following Key is changed in registry if you run Vista or later OS:
DbgJITDebugLaunchSetting value in
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework key.
It’s default value on Windows Vista is 0×10.
Change it to 0×2, which is the default value on Windows XP.
Note .NETFramework is
ONE word - no spaces!
If you run 64 bit OS “Microsoft” part of the registry path mentioned in fact sits under and additional ‘
Wow6432Node’ Folder also. So make sure you look at both locations. For VS2010 B2 it seems like a reboot is required also.
4. Use this template code to test
<#@ template
debug="true" #>
<#
this.Write("hello 1");
System.Diagnostics.Debugger.Break(); this.Write("hello 2");
#>
5. After saving the file you get an info dialog to choose the debugger. There choose VS.
6. In an ideal world you now get the code that you just debugged. If not:
In VS got to Call Stack or press F11 to see the code (if not shown at the beginning).
Make sure you have the debug=true set in the template directive if issues.
If that doesn't help check the registry setting again (.NETFramework) has no spaces.
More info can be found here:
http://www.olegsych.com/...-code-generation-files/[u][/u]