c# - Roslyn 的 CompilationUnitSyntax.ReplaceNode 中的歧义

标签 c# roslyn

我正在尝试使用 Roslyn 替换类的 CompilationUnitSyntax。

但是,我使用的 ReplaceNode 与 Roslyn 常见问题解答和我查看过的任何 StackOverflow 问题中的 ReplaceNode 具有不同的签名。任何人都可以指出这是为什么,我如何使用 ReplaceNodeold ClassDeclarationSyntaxnew ClassDeclarationSyntax 作为参数?

我正在查看 9 月 CTP 常见问题解答¹,方法:

    [FAQ(26)]
    public void AddMethodToClass()

特别是下面一行:

        CompilationUnitSyntax newCompilationUnit =
            compilationUnit.ReplaceNode(classDeclaration, newClassDeclaration);

当我尝试构建此代码时,出现错误,因为 ReplaceNode 需要不同的参数:

 'Roslyn.Compilers.CSharp.CompilationUnitSyntax' does not contain a definition for 'ReplaceNode' and the best extension method overload
 'Roslyn.Compilers.CSharp.SyntaxExtensions.ReplaceNode<TRoot>(TRoot,
 Roslyn.Compilers.CSharp.SyntaxNode,
 Roslyn.Compilers.SyntaxRemoveOptions,
 System.Func<Roslyn.Compilers.CSharp.SyntaxNode,Roslyn.Compilers.CSharp.SyntaxTriviaList>,
 System.Func<Roslyn.Compilers.CSharp.SyntaxNode,Roslyn.Compilers.CSharp.SyntaxTriviaList>)'

¹ 我相当确定我使用的是 9 月 CTP:

我使用的常见问题解答来自 %userprofile%\Documents\Microsoft Roslyn CTP - September 2012\CSharp\APISampleUnitTestsCS\FAQ.cs

NuGet 说我的 Roslyn 包的版本是 1.2.20906.2

最佳答案

ReplaceNode()有两个重载(都是扩展方法):

  1. public static TRoot ReplaceNode<TRoot, TNode>(
        this TRoot root, TNode oldNode, TNode newNode)
        where TRoot : CommonSyntaxNode where TNode : CommonSyntaxNode;
    

    Roslyn.Compilers.CommonSyntaxNodeExtensions 中。

  2. public static TRoot ReplaceNode<TRoot>(
        this TRoot root, SyntaxNode node, SyntaxRemoveOptions options, 
        Func<SyntaxNode, SyntaxTriviaList> keepLeadingTrivia = null,
        Func<SyntaxNode, SyntaxTriviaList> keepTrailingTrivia = null)
        where TRoot : SyntaxNode
    

    Roslyn.Compilers.CSharp.SyntaxExtensions 中。

您想要第一个,但错误消息谈到了第二个,这表明您缺少 using Roslyn.Compilers;

关于c# - Roslyn 的 CompilationUnitSyntax.ReplaceNode 中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948634/

相关文章:

c# - Linq Sum 与 group by

c# - 在 Roslyn 制作的编译中包含嵌入式资源

c# - 如何获取所有用某些属性注释的属性?

c# - 如何在代码隐藏中获取 jQuery 多选 UI 的选定值?

c# - 如何通过LINQ从数据集中的多个表中获取所有列名称

c# - .NET 中最快的图像大小调整

c# - 从 C# 调用远程 powershell 命令

c# - 如果我支持 VS2015,我的分析器可以针对的最新版本 Roslyn 是什么?

c# - 使用 Roslyn 拆分表达式语句

c# - 用于缺少 Microsoft.Net.Compilers 的项目的 Roslyn 编译器版本