相关疑难解决方法(0)

从头开始构建SyntaxTree

我之前曾问过这个问题,这个问题得到了解答,但是有人给出了一个建议,可以帮助我防止在我前进时犯下类似的错误.

使用Roslyn将自动实现的属性添加到类

建议是我从下到上而不是从上到下构建语法树.有人可以提供一个小型演示或链接,显示我将如何从头开始这样做?

这是代码:

var root = (CompilationUnitSyntax)document.GetSyntaxRoot();

    // Add the namespace
    var namespaceAnnotation = new SyntaxAnnotation();
    root = root.WithMembers(
        Syntax.NamespaceDeclaration(
            Syntax.ParseName("ACO"))
                .NormalizeWhitespace()
                .WithAdditionalAnnotations(namespaceAnnotation));
    document = document.UpdateSyntaxRoot(root);

    // Add a class to the newly created namespace, and update the document
    var namespaceNode = (NamespaceDeclarationSyntax)root
        .GetAnnotatedNodesAndTokens(namespaceAnnotation)
        .Single()
        .AsNode();

    var classAnnotation = new SyntaxAnnotation();
    var baseTypeName = Syntax.ParseTypeName("System.Windows.Forms.Form");
    SyntaxTokenList syntaxTokenList = new SyntaxTokenList()
        {
            Syntax.Token(SyntaxKind.PublicKeyword)
        };

    var newNamespaceNode = namespaceNode
        .WithMembers(
            Syntax.List<MemberDeclarationSyntax>(
                Syntax.ClassDeclaration("MainForm")
                    .WithAdditionalAnnotations(classAnnotation)
                    .AddBaseListTypes(baseTypeName)
                    .WithModifiers(Syntax.Token(SyntaxKind.PublicKeyword))));

    root = root.ReplaceNode(namespaceNode, newNamespaceNode).NormalizeWhitespace();
    document = …
Run Code Online (Sandbox Code Playgroud)

c# roslyn

25
推荐指数
2
解决办法
4237
查看次数

使用 Roslyn 向类添加新的字段声明

有什么方法可以使用 roslyn 将成员添加到类中?我想补充:

public int number {get;set;}
Run Code Online (Sandbox Code Playgroud)

更新我使用了这个代码:

       PropertyDeclarationSyntax o =  
       SyntaxFactory.PropertyDeclaration(SyntaxFactory.ParseTypeName("public  
       System.Windows.Forms.Timer"), "Ticker { get; set; }");

       var newRoot = root.ReplaceNode(oldMethod, oldMethod.AddMembers(o));
       newRoot = Formatter.Format(newRoot, new AdhocWorkspace());

       File.WriteAllText(file, newRoot.ToFullString());
Run Code Online (Sandbox Code Playgroud)

但结果是这样的:

   public class ClassChild
{
    public int n;
    private int n2;

    public void method1()
    {
        string c = "";
        Console.WriteLine();
    }

public System.Windows.Forms.TimerTicker { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

}

我想内联 public System.Windows.Forms.TimerTicker { get; 放; } 与 n 和 n2。我怎样才能做到这一点 ?

c# roslyn roslyn-code-analysis

6
推荐指数
1
解决办法
1484
查看次数

标签 统计

c# ×2

roslyn ×2

roslyn-code-analysis ×1