複数のソースを持つCompileAssemblyFromSource
を使用して、コードを動的にコンパイルしています。.NET CompileAssemblyFromSource:どのソースが失敗したかを判断しますか?
コンパイルエラーが発生した場合は、Errors
コレクションから行番号などを取得できます。
ただし、行番号はすべてのソース内の行番号です。私が必要とするのは、どのソースと、(追加されたソースの中の)失敗したソース内の行番号です。
計算のアクロバットを使わずに可能ですか?
複数のソースを持つCompileAssemblyFromSource
を使用して、コードを動的にコンパイルしています。.NET CompileAssemblyFromSource:どのソースが失敗したかを判断しますか?
コンパイルエラーが発生した場合は、Errors
コレクションから行番号などを取得できます。
ただし、行番号はすべてのソース内の行番号です。私が必要とするのは、どのソースと、(追加されたソースの中の)失敗したソース内の行番号です。
計算のアクロバットを使わずに可能ですか?
これは私のアプリケーションの1つで、エラーがあれば、コンパイル時に生成されたすべてのエラーメッセージとともに、コンパイルエラーを生成したソース - コンパイルされたソースを書き出します。これらのエラーメッセージをコメントに入れて、ソースファイルの最後に追加します。私が正しく覚えている場合、File.WriteAllText()で書かれたソースファイルは、ユーザーのtempディレクトリにあるファイルに格納され、そのソースモジュールへのパスで例外がスローされます。コンパイルエラーが発生した場合にのみこれが発生します。エラーがなければ、私はこの方法でソースを書き出しません。
実際には、すべてのソースを1つのモジュールに連結するため、私の場合は1つのモジュールしかありません。このような状況では、「行143」が何を意味するのかについて混乱はありません。
代わりに(少なくともデバッグまたは冗長オプションとして) 'CompileAssemblyFromFile'を使うことを考えています。これは、事実の後のソースを見て、何が起こっていたのかを見ることができます。あなたが一時ファイルを使用している場合は、後でいつでもクリーンアップすることができます... –
@Paulそれは答えでなければなりません! –
@Paul:一時ファイルへの書き込み私は使用できません恐れています。私の解決策(具体的な問題があります)では、ソースは多くの個々のソース(エンドユーザーからも)から集められており、問題のある実際のソースを見るだけでよいです。 –