Roslyn CSharpSyntaxTree.ParseText添加引用System.Runtime

use*_*893 7 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());`
Run Code Online (Sandbox Code Playgroud)

在调试模式下,我看到变量"node"和"ret"默默地抛出此错误:

"类型'对象'是在未引用的程序集中定义的.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"的引用.

在Roslyn Plurarsight视频教程"使用API​​创建语法树"中没有问题.

如何附加对CSharpSyntaxTree类的引用.

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

我的Visual Studio 2015预览中出错

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

Pluralsight视频

编辑:

问题仅出在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);
    }
}
Run Code Online (Sandbox Code Playgroud)