Roslyn - 用完全限定名称替换所有名称

Roslyn - replace all names by full qualified name

如何用完整的限定名称替换一段 C# 代码中的所有名称?目的是用限定名称替换所有 usings。 我知道使用别名声明可能会很棘手,但在我们的情况下并非如此。

根据您的需要,您可以将此作为 CodeFixProviderSyntaxRewriter 实施。无论如何,请从这里开始:https://joshvarty.wordpress.com/2014/08/15/learn-roslyn-now-part-5-csharpsyntaxrewriter/

除了上下文,您很可能需要处理 InvocationExpressionSyntax 个节点,这些节点的符号是 IMethodSymbol 并且 ReducedExtension 作为方法类型:

var inv = (InvocationExpressionSyntax)node;
var symbol = semanticModel.GetSymbolInfo(inv).Symbol as IMethodSymbol;
if (symbol.MethodKind == MethodKind.ReducedExtension)
{
  ...
}

然后您需要将 InvocationExpressionSyntax 重写为另一个。这个站点对重写有很大帮助:https://roslynquoter.azurewebsites.net/。您可以通过调用 ToDisplayString()ToDisplayParts() 来获取方法包含类型的全名。

此外,您需要将第一个参数传递给新的调用,因此您需要获取调用调用的表达式:((MemberAccessExpressionSyntax)inv.Expression).Expression

您可以按照这些思路开始,如果遇到困难,您可以回到 SO 并提出适当的问题。