Vous pourriez être en mesure de faire d'une pierre deux coups avec Roslyn (alias " .NET Compiler Platform "). Vous aurez besoin du paquet Microsoft.CodeAnalysis.CSharp
.
Tout d'abord, vous pouvez utiliser le SyntaxFactory
pour générer des nœuds syntaxiques, que vous pouvez combiner en structures plus importantes (membres, méthodes, classes, espaces de noms, unités de compilation).
Vous pouvez également obtenir une représentation joliment formatée de vos nœuds syntaxiques avec ToString()
o ToFullString()
(avec une indentation correcte, des sauts de ligne et tout le reste), ce qui est ce que vous recherchiez à l'origine.
Il existe de nombreux tutoriels en ligne sur la façon d'utiliser cette API (par ex. 1 , 2 ), et il y a le Quoter Roslyn site web qui peut convertir un morceau de code C# en SyntaxFactory
appels.
Deuxièmement, vous pouvez ensuite utiliser le résultat CSharpSyntaxNode
pour créer un CSharpSyntaxTree
que vous pouvez compiler en IL à l'aide de la fonction CSharpCompilation
(après tout, Roslyn est le compilateur C# de référence).
Si vous voulez, vous pouvez même émettre l'assemblage généré dans un flux, récupérer les données binaires de l'assemblage à partir de là, et charger votre assemblage nouvellement créé dans votre assemblage en cours d'exécution, et instancier dynamiquement les types que vous venez de définir.