私はStackExchange.Precompilation
を使用してビルド時にいくつかのC#構文変換を実行しています。ビルド中に私のICompileModule
から例外をスローし、その出力をVisual Studioの出力ウィンドウに表示したいと考えています。`StackExchange.Precompilation`を使用して、ビルドエラーをどのように出力できますか?
これらの構文変換中に発生するエラーを表すために、カスタム例外タイプPrecompilationException
を作成しました。ここに私の例外クラスではありません。これらの例外のいずれかがスローされ
[Serializable]
public class PrecompilationException : Exception {
public PrecompilationException() : base() { }
public PrecompilationException(string message) : base(message) { }
public PrecompilationException(string message, Exception innerException) : base(message, innerException) { }
protected PrecompilationException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
は、出力ウィンドウには、そのメッセージさSerializationException
示し、「タイプはメンバーのために解決されていない「PrecompilationExceptionを...」が、ないありますそのメッセージまたはスタックトレースのようなPrecompilationException
の詳細。
私は例外クラスで適切なシリアル化を行うために重要なものを除外しましたか? StackExchange.Precompilation
にエラーを記録する良い方法はありますか?
更新 私は、出力ウィンドウには、例外の詳細が表示されますException
またはNotSupportedException
ような何かの標準にスローされた例外の種類を変更した場合。しかし、私はまだこのようにカスタム例外の種類を使用できるようにしたいと思います。
更新2 この質問に対する答えは、私のカスタム例外タイプが機能していなかった理由を明らかにしています。基本的に、ASP.NETコンパイラはGACにないタイプのシリアル化に問題があります。
Type resolution error during ASP.NET precompilation
おかげで
Console.WriteLine
にあります。 'Diagnostic'を使うとビルドは警告を無視してエラーに失敗するようですが、出力やエラーリストのウィンドウには関連する情報はありません。フォーマットされた 'Console.WriteLine'アプローチはエラーリストウィンドウにエラー/警告を出しますが、' Microsoft.CodeAnalysis.Location'をそのフォーマットで必要な行/列番号に翻訳するのに問題があります。エラーリストに診断を出すために 'Precompilation'を得るために必要なことは何ですか?または、構文オブジェクトから行番号/列番号を簡単に取得する方法はありますか? – JamesFaixDiagnostic.ToString上のConsole.WriteLineは、正しい形式である必要があります。 – m0sa
私は実際には 'DiagnosticDescriptor'を正しく初期化していませんでした。あなたが今提案したどちらのモードでも動作します。再度、感謝します! – JamesFaix