Я пытаюсь добавить метод в класс с помощью Roslyn.
Я разбираю файл .cs и получаю класс с расширением.Невозможно добавить участника в класс программно, используя Roslyn
SyntaxTree tree = SyntaxTree.ParseFile(Path);
CompilationUnitSyntax root = (CompilationUnitSyntax)tree.GetRoot();
MemberDeclarationSyntax firstMember = root.Members[0];
TypeDeclarationSyntax lClassDeclarationSyntax = (TypeDeclarationSyntax)NamespaceDeclaration.Members[1];
Затем я создать экземпляр типа MemberDeclaration
MethodDeclarationSyntax lMethodDeclarationSyntax= Syntax.MethodDeclaration(
Syntax.List<AttributeListSyntax>(),
Syntax.TokenList(),
Syntax.IdentifierName("MemoryStream"),
null,
Syntax.Identifier("Serialize"),
null,
Syntax.ParameterList(),
Syntax.List<TypeParameterConstraintClauseSyntax>(),
Syntax.Block(lList));
, где lList
является телом метода. Тогда я пытаюсь добавить этот экземпляр класса
lClassDeclarationSyntax.Members.Add(lMethodDeclarationSyntax);
, но ничего в ответ. Как я могу это сделать?
И как это не нарушает структуру файла? Например, у меня есть 2 класса в файле, и у меня есть только один ... тогда мне нужно создать новое дерево, учитывая второй класс, а затем сохранить дерево в fie cs, гарантируя удаление старого файл? – Imorian
Или я могу просто заменить деревья? – Imorian
Это не разрушает файл. Если вы хотите _copy_ файла с обновленным классом, вы можете использовать root.ReplaceNode, чтобы получить его с вашими изменениями. –