使用语句Roslyn脚本/代码排序和删除(未使用)?

luc*_*iet 9 c# compiler-construction refactoring roslyn

使用语句Roslyn脚本/代码排序和删除(未使用)?我正在寻找一些可以运行项目并排序和删除未使用的using语句的.NET/Roslyn(编译器作为服务)代码.我相信罗斯林可以做到这一点吗?任何人都可以指向可以重写的代码吗?

Jef*_*fin 9

这是Visual Studio中的一个功能,但在学术上我认为您将使用SyntaxTree中的语句来收集,如下所示:

var usings = syntaxTree.Root.DescendentNodes().Where(node is UsingDirectiveSyntax);
Run Code Online (Sandbox Code Playgroud)

...并将其与符号表解析的名称空间进行比较,如下所示:

private static IEnumerable<INamespaceSymbol> GetNamespaceSymbol(ISymbol symbol)
{
    if (symbol != null && symbol.ContainingNamespace != null)
        yield return symbol.ContainingNamespace;
}

var ns = semanticModel.SyntaxTree.Root.DescendentNodes().SelectMany(node =>
    GetNamespaceSymbol(semanticModel.GetSemanticInfo(node).Symbol)).Distinct();
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用".OfType <UsingDirectiveSyntax>()"而不是".Where(node is UsingDirectiveSyntax)" (2认同)