2

我正在尝试使用 T4 文本模板生成代码,但是在运行脚本时,出现以下错误:

运行转换:System.NullReferenceException:对象引用未设置为对象的实例。
   在 Microsoft.VisualStudio.TextTemplatingB0A58A4C85EA3D7032675015C6052C89.GeneratedTextTransformation.TransformText()
   在 Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSession 会话,字符串源,ITextTemplatingEngineHost 主机,字符串和结果)

由于我对 T4 不熟悉,因此我不确定在哪里可以解决此问题。

4

2 回答 2

9

您需要调试模板以找到NullReferenceException发生的位置。Tim Larson在这里有快速概述,Oleg Sych 在这里有更多细节,以及他在 T4 上的其他优秀博客文章。

这是简短的版本:

  1. 将 debug="true" 添加到模板指令:<#@ template debug="true" #>
  2. 启动调试器System.Diagnostics.Debugger.Launch();
  3. 休息System.Diagnostics.Debugger.Break();
  4. Visual Studio 即时调试器对话框中选择Microsoft Visual Studio 的新实例,然后单击
  5. 调试 T4 模板

这是一个简单的示例,可帮助NullReferenceException在 bar 上调用 ToString 时捕获:

<#@ 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使事情正常运行。

于 2012-07-24T19:23:54.290 回答
1

您可以调试 T4 模板。MSDN 对此提供了一些帮助

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

于 2012-07-24T19:00:41.553 回答