2

T4 Text Templatingを使用してコードを生成しようとしていますが、スクリプトを実行すると、次のエラーが発生します。

実行中の変換: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 StudioJust-In-TimeDebuggerダイアログでMicrosoftVisualStudioの新しいインスタンスを選択し、[はい]をクリックます
  5. T4テンプレートをデバッグする

NullReferenceExceptionこれは、バーで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 に答える