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

标签 c# compiler-construction refactoring roslyn

排序和删除(未使用的)使用语句 Roslyn 脚本/代码?我正在寻找一些 .NET/Roslyn(编译器即服务)代码,它们可以在项目中运行并排序和删除未使用的 using 语句。我相信 Roslyn 可以做到这一点吗?谁能指出可以重写的代码?

最佳答案

这是 Visual Studio 中的一项功能,但在学术上我认为您会像这样从 SyntaxTree 中收集 using 语句:

var usings = syntaxTree.Root.DescendentNodes().Where(node is UsingDirectiveSyntax);

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

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();

关于c# - 使用语句 Roslyn 脚本/代码排序和删除(未使用的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913994/

相关文章:

java - 如何调用子类中重写的方法?重构的潜在候选人

css - 重构 CSS 选择器

c# - Reactive Extension 中的数据服务

c# - 为什么 GetHashCode 方法需要在 C# 中进行移位

c# - 由于 OnTextChanged 事件,ASP 控件需要双击才能获得焦点

c# - C# 或 JIT 编译器是否足够智能以处理此问题?

c# - 如何以编程方式取消选中 ToggleButton

compiler-construction - 使用 Antlr 创建语言

c++ - 编译器为具有引用和常量成员的类生成的复制/赋值函数

c++ - 如何处理 "signed/unsigned mismatch"警告 (C4018)?