使用`StackExchange.Precompilation`,如何输出构建错误?

时间:2016-12-03 22:21:12

标签: c# serialization exception-handling metaprogramming roslyn

我正在使用StackExchange.Precompilation在构建时执行一些C#语法转换。我希望能够在构建期间从ICompileModule抛出异常并将这些输出输出到Visual Studio的输出窗口。

我创建了一个自定义异常类型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,其消息为&#34;未解析成员类型&#39;预编译异常...&#34; < / em>,但没有PrecompilationException的详细信息,如其消息或堆栈跟踪。

在我的异常类中,我是否遗漏了一些对于正确序列化很重要的内容?有没有更好的方法让StackExchange.Precompilation记录错误?

更新 如果我将抛出的异常类型更改为标准ExceptionNotSupportedException,则输出窗口将显示异常详细信息。但是,我仍然希望能够以这种方式使用自定义异常类型。

UPDATE2 这个问题的答案解释了为什么我的自定义异常类型不起作用。基本上,ASP.NET编译器无法序列化GAC中没有的类型。

Type resolution error during ASP.NET precompilation

1 个答案:

答案 0 :(得分:2)

只需在Diagnostic / Before中的Diagnostics个收藏集中添加AfterCompileContext即可。

另一种选择是MsBuild VS-Aware error message format

中的Console.WriteLine