Sözdizimi ağacını değiştirmeye çalışıyorum ve sonra semantik modelini güncelleştirmeye çalışıyorum. - Aynı istisnasözdizimi ağacını değiştirin ve sonra güncelleştirilmiş semantik modelini edinin
var tree = Roslyn.Compilers.CSharp.SyntaxTree.ParseCompilationUnit(code);
var compilation = Roslyn.Compilers.CSharp.Compilation.Create(
"MyCompilation",
syntaxTrees: new[] { tree },
references: new[] { mscorlib });
var semanticModel = compilation.GetSemanticModel(tree);
...
var oldStatementNode = (parent as ExpressionStatementSyntax); //some SyntaxNode in the tree
var oldExpressionNode = oldStatementNode.Expression;
var newExpressionNode = Syntax.ParenthesizedExpression(oldExpressionNode);
var newRootNode = tree.GetRoot().ReplaceNode(oldExpressionNode, newExpressionNode);
var semanticInfo = semanticModel.GetTypeInfo(newExpressionNode); //throws exception "Syntax node is not within syntax tree"
ben semanticModel = compilation.GetSemanticModel(tree);
arayın veya hatta GetTypeInfo()
çağırmadan önce tree
ile yeni derleme yapmaya çalışırsanız: İşte ben bugüne kadar ne var.
Peki nasıl güncelleştirilir SemanticModel
? (Tabii ki değiştirilmiş bir kaynak alıp baştan beri her şeyi yapabilirim, ama sanırım daha verimli bir yol var).
Burada bariz bir şey eksik. Eminim, belki de bir yerlerde yaratılmış yeni bir sözdizimi ağacı var mı?