Visual Studio 如何在运行转换时调试System.NullReferenceException?

snz8szmq  于 2023-06-06  发布在  其他
关注(0)|答案(3)|浏览(469)

我试图使用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不熟悉,我不确定该在哪里解决这个问题。

3xiyfsfu

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

<#@ template debug="true" language="C#" #>
<#@ output extension=".txt" #>
<#
    System.Diagnostics.Debugger.Launch();
    System.Diagnostics.Debugger.Break();

    object bar = null;  
#>
foo<#= bar.ToString() #>

请务必检查第一个链接,因为在某些版本中,您需要将注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgJITDebugLaunchSetting更新为0x2才能使其正确运行。

but5z9lq

but5z9lq2#

您可以调试T4模板。MSDN在that上提供了一些帮助。
在调试模式下,您可以查看生成的类,以找出错误所在。T4保存生成的代码、程序集和PDB TEMP文件夹(%USERPROFILE%\Local Settings\Temp)。cs文件包含GeneratedTextTransformation的源代码。.cmdline文件包含用于将.cs文件编译为.NET程序集(.dll文件)的命令行选项。

pcrecxhr

pcrecxhr3#

更新2023
在Visual Studio中,右键单击.tt文件,然后单击Debug T4 Template。
Debugging a T4 Text Template

相关问题