Формирование команд санитарной оболочки или системных вызовов в Ruby

Типы Roslyn неизменяемы, поэтому вам нужно построить новый SyntaxTree для вашего newRootNode, а затем вызвать compilation.UpdateSyntaxTree, чтобы получить новый Compilation, а затем вы можете вызвать newCompilation.GetSemanticModel(newTree), чтобы получить новый SemanticModel.

Рассмотрите возможность перехода на уровень обслуживания и вместо этого используйте ISolution. Что-то вроде:

var doc = Solution.Create(SolutionId.CreateNewId()).AddCSharpProject("MyCompilation", "MyCompilation").AddMetadataReference(mscorlib).AddDocument("MyFile", code);

var semanticModel = (SemanticModel)doc.GetSemanticModel();
var root = (CompilationUnitSyntax)doc.GetSyntaxRoot();

SyntaxNode parent = null;
var oldStatementNode = (parent as ExpressionStatementSyntax); //some SyntaxNode in the tree
var oldExpressionNode = oldStatementNode.Expression;
var newExpressionNode = Syntax.ParenthesizedExpression(oldExpressionNode);
var newRootNode = root.ReplaceNode(oldExpressionNode, newExpressionNode);

doc = doc.UpdateSyntaxRoot(newRootNode);
semanticModel = (SemanticModel)doc.GetSemanticModel();
13
задан arbales 11 January 2011 в 05:02
поделиться