我正在使用 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
,其消息为“Type is not returned for member 'PrecompilationException...”,但是没有该 PrecompilationException
的详细信息,例如其消息或堆栈跟踪。
我是否在异常类中遗漏了一些对于正确序列化很重要的内容?有没有更好的方法让 StackExchange.Precompilation
记录错误?
更新 如果我将抛出的异常类型更改为 Exception 或 NotSupportedException 等标准类型,输出窗口将显示异常详细信息。但是,我仍然希望能够以这种方式使用自定义异常类型。
更新2 这个问题的答案揭示了为什么我的自定义异常类型不起作用。基本上,ASP.NET 编译器在序列化 GAC 中不存在的类型时遇到问题。
最佳答案
只需添加 Diagnostic
到 Before
中的 Diagnostics
集合/AfterCompileContext
.
另一种选择是 MsBuild VS-Aware error message format 中的 Console.WriteLine
关于c# - 使用 `StackExchange.Precompilation` ,如何输出构建错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953114/