我试图使用T4文本模板生成代码,但在运行脚本时,我得到以下错误:
Running transformation: System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.VisualStudio.TextTemplatingB0A58A4C85EA3D7032675015C6052C89.GeneratedTextTransformation.TransformText()
at Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSession session, String source, ITextTemplatingEngineHost host, String& result)
由于我对T4不熟悉,我不确定该在哪里解决这个问题。
3条答案
按热度按时间3xiyfsfu1#
您需要调试模板以找到
NullReferenceException
发生的位置。Tim Larson有here的快速概述,Oleg Sych有here的更多细节,沿着他在T4上的其他优秀博客条目。以下是简短的版本:
1.将debug=“true”添加到模板指令:
<#@ template debug="true" #>
1.启动调试器
System.Diagnostics.Debugger.Launch();
1.断裂
System.Diagnostics.Debugger.Break();
1.在“Visual Studio实时调试器”对话框中选择“Microsoft Visual Studio的新示例”,然后单击“是”
1.调试您的T4模板
下面是一个简单的例子,可以帮助在bar上调用ToString时捕获
NullReferenceException
:请务必检查第一个链接,因为在某些版本中,您需要将注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgJITDebugLaunchSetting
更新为0x2
才能使其正确运行。but5z9lq2#
您可以调试T4模板。MSDN在that上提供了一些帮助。
在调试模式下,您可以查看生成的类,以找出错误所在。T4保存生成的代码、程序集和PDB TEMP文件夹(%USERPROFILE%\Local Settings\Temp)。cs文件包含GeneratedTextTransformation的源代码。.cmdline文件包含用于将.cs文件编译为.NET程序集(.dll文件)的命令行选项。
pcrecxhr3#
更新2023
在Visual Studio中,右键单击.tt文件,然后单击Debug T4 Template。
Debugging a T4 Text Template