2011-10-14 3 views
5

複数のソースを持つCompileAssemblyFromSourceを使用して、コードを動的にコンパイルしています。.NET CompileAssemblyFromSource:どのソースが失敗したかを判断しますか?

コンパイルエラーが発生した場合は、Errorsコレクションから行番号などを取得できます。

ただし、行番号はすべてのソース内の行番号です。私が必要とするのは、どのソースと、(追加されたソースの中の)失敗したソース内の行番号です。

計算のアクロバットを使わずに可能ですか?

+3

代わりに(少なくともデバッグまたは冗長オプションとして) 'CompileAssemblyFromFile'を使うことを考えています。これは、事実の後のソースを見て、何が起こっていたのかを見ることができます。あなたが一時ファイルを使用している場合は、後でいつでもクリーンアップすることができます... –

+1

@Paulそれは答えでなければなりません! –

+0

@Paul:一時ファイルへの書き込み私は使用できません恐れています。私の解決策(具体的な問題があります)では、ソースは多くの個々のソース(エンドユーザーからも)から集められており、問題のある実際のソースを見るだけでよいです。 –

答えて

0

これは私のアプリケーションの1つで、エラーがあれば、コンパイル時に生成されたすべてのエラーメッセージとともに、コンパイルエラーを生成したソース - コンパイルされたソースを書き出します。これらのエラーメッセージをコメントに入れて、ソースファイルの最後に追加します。私が正しく覚えている場合、File.WriteAllText()で書かれたソースファイルは、ユーザーのtempディレクトリにあるファイルに格納され、そのソースモジュールへのパスで例外がスローされます。コンパイルエラーが発生した場合にのみこれが発生します。エラーがなければ、私はこの方法でソースを書き出しません。

実際には、すべてのソースを1つのモジュールに連結するため、私の場合は1つのモジュールしかありません。このような状況では、「行143」が何を意味するのかについて混乱はありません。

関連する問題