我已经从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。
在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);
}
}