生成された C# コードに対して、テンプレート コードの行番号を C# の行番号と一致させるための #pragma または同様のディレクティブはありますか?
-
20-09-2019 - |
質問
古いスタイルの ASP コードに似たテンプレート システムがあります。全体を C# ソース コードに書き換え、コンパイルし、最後に実行するクラスを通じてこれを実行します。
私が疑問に思っているのは、コンパイル エラーをテンプレート ファイルの行番号と一致させる、生成された C# コードに散りばめることができる、ある種の #pragma のようなディレクティブがあるかどうかということです。
たとえば、テンプレート コードに次の最初で唯一の行があるとします。
Object o = datta; // should be data, compiler error
しかし、これをコンパイルするには、名前空間、クラス、メソッド、定型コードを追加する必要があるため、テンプレート ファイルの #1 行である上記の行は、実際には #17 行目になります。 C# コード内の (例示のみを目的とした乱数)。コンパイラ エラーは、当然、エラーが 1 行目ではなく 17 行目にあるとフラグを立てます。
以前使用したことのある別のプログラミング言語 (どの言語だったかは思い出せませんが) には、エラー行番号を整列させる追加できるディレクティブがあったことを覚えています。
C# 3.5 にはそのようなものはありますか?
解決
あなたが持っているのは、 #line
プリプロセッサディレクティブ.
#line
コンパイラの行番号と、(オプションで) エラーと警告のファイル名出力を変更できます。の
#line directive
ビルド プロセスの自動化された中間ステップで使用される場合があります。たとえば、元のソース コード ファイルから行が削除されたが、ファイル内の元の行番号に基づいてコンパイラに出力を生成させたい場合は、行を削除してから、次のように元の行番号をシミュレートできます。#line
.の
#line hidden
ディレクティブは、開発者がコードをステップ実行するときに、ディレクティブの間の行がデバッガから隠蔽されるようにします。#line hidden
そして次#line
ディレクティブ (別の #line hidden ディレクティブではないと仮定) はステップオーバーされます。このオプションを使用すると、ASP.NET がユーザー定義コードと機械生成コードを区別できるようにすることもできます。ASP.NET がこの機能の主な利用者ですが、より多くのソース ジェネレーターがこの機能を利用する可能性があります。あ
#line hidden
ディレクティブは、エラー報告のファイル名や行番号には影響しません。つまり、隠しブロックでエラーが発生した場合、コンパイラは現在のファイル名とエラーの行番号を報告します。の
#line filename
ディレクティブは、コンパイラ出力に表示するファイル名を指定します。デフォルトでは、ソース コード ファイルの実際の名前が使用されます。ファイル名は二重引用符 ("") で囲み、その前に行番号を付ける必要があります。