Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 运行转换时如何调试System.NullReferenceException?_.net_Visual Studio_T4 - Fatal编程技术网

.net 运行转换时如何调试System.NullReferenceException?

.net 运行转换时如何调试System.NullReferenceException?,.net,visual-studio,t4,.net,Visual Studio,T4,我试图使用T4文本模板生成代码,但在运行脚本时,出现以下错误: Running transformation: System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.VisualStudio.TextTemplatingB0A58A4C85EA3D7032675015C6052C89.GeneratedTextTransformation.Trans

我试图使用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) 正在运行转换:System.NullReferenceException:对象引用未设置为对象的实例。 在Microsoft.VisualStudio.TextTemplatingB0A58A4C85EA3D7032675015C6052C89.GeneratedTextTransformation.TransformText()上 在Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSession会话、字符串源、ITextTemplatingEngineHost主机、字符串和结果)
由于我对T4不熟悉,我不确定该从何处解决此问题。

您可以调试T4模板。 MSDN在这方面提供了一些帮助

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

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

以下是简短的版本:

  • 将debug=“true”添加到模板指令:
  • 启动调试器
    System.Diagnostics.debugger.Launch()
  • Break
    System.Diagnostics.Debugger.Break()
  • 在Visual Studio实时调试器对话框中选择Microsoft Visual Studio的新实例,然后单击“是”
  • 调试T4模板
  • 下面是一个简单的示例,用于在调用工具栏上的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\U LOCAL\U MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgJITDebugLaunchSetting
    更新为
    0x2
    ,以使事情正常运行。

    我找不到内部异常。