Exemplo n.º 1
0
 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);
 }