Roslyn CSharpSyntaxTree.ParseText添加引用System.Runtime

时间:2014-12-23 21:05:02

标签: c# roslyn visual-studio-2015

我已经从Roslyn Pluralsight教程中复制了这段代码。

string code = "class Foo { }";

var tree = CSharpSyntaxTree.ParseText(code);
var node = tree.GetRoot();

Console.WriteLine(node.ToString());

var ret = SyntaxFactory.ClassDeclaration("Foo").
    WithMembers(SyntaxFactory.List<MemberDeclarationSyntax>(new[] {
        SyntaxFactory.MethodDeclaration(SyntaxFactory.
        PredefinedType(SyntaxFactory.Token(SyntaxKind.VoidKeyword)),
        "Bar"
        ).WithBody(SyntaxFactory.Block()
        )
})).NormalizeWhitespace();

Console.WriteLine(ret.ToString());`

在调试模式下,我看到变量&#34; node&#34;并且&#34; ret&#34;默默地抛出这个错误:

  

&#34;类型&#39;对象&#39;在未引用的程序集中定义。您必须添加对程序集的引用,System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#34;。

在Roslyn Plurarsight视频教程&#34;使用API​​创建语法树&#34;这没问题。

如何附加对CSharpSyntaxTree类的引用。

编辑:
我正在使用Visual Studio 2015 Preview。

Error in my Visual Studio 2015 Preview

在Pluralsight视频中,这个简单的代码没有错误

Pluralsight video

修改:

问题仅出在Visual Studio工具提示中。我可以毫无问题地使用Syntax Tree API。例如,此代码编写节点和令牌而没有任何奇怪的异常,但Visual Studio在调试代码时不会在工具提示中显示语法树。

static void PrintSyntaxTree(SyntaxNode node)
{
    if (node != null)
    {
        foreach (var item in node.ChildTokens())
        {
            Console.Write(item);
        }
        Console.WriteLine("");
        foreach (SyntaxNode child in node.ChildNodes())
            PrintSyntaxTree(child);
    }
}

static void Main(string[] args)
{
    string code = "class Foo { public void Bar(){} }";

    var tree = CSharpSyntaxTree.ParseText(code);

    var node = tree.GetRoot();

    foreach (SyntaxNode child in node.ChildNodes())
    {
        PrintSyntaxTree(child);
    }
}

0 个答案:

没有答案