public static Func <CSharpCompilation, CSharpCompilation> Creator() { return((compilation) => { var trees = compilation.SyntaxTrees; foreach (var tree in trees) { var semantiModel = compilation.GetSemanticModel(tree); var errors = semantiModel.GetDiagnostics(); CompilationUnitSyntax root = tree.GetCompilationUnitRoot(); var editor = new SyntaxEditor(root, new AdhocWorkspace()); var removeCache = new HashSet <UsingDirectiveSyntax>(); foreach (var item in errors) { var result = UsingAnalysistorManagement.Handle(item); if (result != null) { removeCache.UnionWith(result); } } foreach (var item in removeCache) { editor.RemoveNode(item); } compilation = compilation.ReplaceSyntaxTree(tree, editor.GetChangedRoot().SyntaxTree); } return compilation; }); }
/// <summary> /// 添加编译错误处理程序 /// </summary> /// <param name="builder"></param> /// <param name="key">错误ID,例如:CS0246</param> /// <param name="action"> Func<错误集合,语法树控制器,源代码,新代码(返回)> </param> /// <returns></returns> public static AssemblyCSharpBuilder AddUsingAnalysistor(this AssemblyCSharpBuilder builder, string key, Func <Diagnostic, IEnumerable <UsingDirectiveSyntax> > action) { UsingAnalysistorManagement.Add(key, action); return(builder); }