如果您的要求是解析 C# 源代码,那么我认为 Roslyn 是一个不错的选择。如果你打算在这部分使用它,我认为将它用于代码生成也是有意义的。
使用 Roslyn 生成代码可能非常冗长(尤其是与 CodeDom 相比时),但我认为这对您来说不会是一个大问题。
我认为SyntaxRewriter
最适合对代码进行本地化更改。但是你问的是解析整个类并基于它生成类型,我认为直接查询语法树效果最好。
例如,为类中的所有属性生成只读接口的最简单示例可能如下所示:
var originalClass =
compilationUnit.DescendantNodes().OfType<ClassDeclarationSyntax>().Single();
string originalClassName = originalClass.Identifier.ValueText;
var properties =
originalClass.DescendantNodes().OfType<PropertyDeclarationSyntax>();
var generatedInterface =
SyntaxFactory.InterfaceDeclaration('I' + originalClassName)
.AddMembers(
properties.Select(
p =>
SyntaxFactory.PropertyDeclaration(p.Type, p.Identifier)
.AddAccessorListAccessors(
SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
.WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))))
.ToArray());