2015-06-06 8 views
7

Voglio fare un codice di base molto semplice (convertire una specifica API di servizio in alcune classi C# per comunicare con il servizio). Ho trovato this question che sembra suggerire che posso chiamare Syntax.CompilationUnit() per creare un nuovo CompilationUnityntax, tuttavia non riesco a compilare questo codice; Non riesco a trovare un metodo CompilationUnit su una delle classi di sintassi posso trovare (né posso individuare eventuali documenti su questo) :(Come creare un albero di sintassi di Roslyn da zero?

CSharpSyntaxTree.Create sembra avere bisogno di un CSharpSyntaxNode, ma io non riesco a capire come creare uno di loro sia:./

sto utilizzando VS 2015 RC con l'ultimo pacchetto Microsoft.CodeAnalysis NuGet (1.0.0-RC2)

+1

yo La mia domanda mi ha ispirato a dare una breve panoramica della (nuova?) API di roslyn. Dai un'occhiata qui: http://www.vannevel.net/2015/06/07/a-few-important-roslyn-api-helpers/ –

risposta

8

sembra che Syntax è ora SyntaxFactory:

var comp = SyntaxFactory.CompilationUnit() 
     .AddMembers(
      SyntaxFactory.NamespaceDeclaration(SyntaxFactory.IdentifierName("ACO")) 
        .AddMembers(
        SyntaxFactory.ClassDeclaration("MainForm") 
         .AddMembers(
          SyntaxFactory.PropertyDeclaration(SyntaxFactory.ParseTypeName("System.Windows.Forms.Timer"), "Ticker") 
            .AddAccessorListAccessors(
            SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)), 
            SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))), 
          SyntaxFactory.MethodDeclaration(SyntaxFactory.ParseTypeName("void"), "Main") 
            .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword)) 
            .WithBody(SyntaxFactory.Block()) 
          ) 
        ) 
      );