J'écris .NET On-the-Fly compilateur pour les scripts CLR et je veux mettre en œuvre l'idée suivante: il y a un fichier modèle avec du code C#, je veux le lire, créer un assembly, le charger et amplifier la source à la volée. Comment puis je faire ça?Charger l'ensemble et changer la source, est-ce possible et comment?
2
A
Répondre
3
Vous pouvez le faire avec CompileAssemblyFromSource. J'ai fait quelque chose de similaire dans le passé, où j'ai augmenté certains scripts avec des wrappers de classe statiques afin qu'ils puissent être facilement appelés. Pour ce faire, chargez simplement votre modèle, ajoutez vos amplifications supplémentaires au code et compilez-le en une seule fois.
Si vous souhaitez modifier un ensemble existant, vous aurez besoin d'utiliser quelque chose comme Mono.Cecil. Il vous permet de charger et de modifier en tant qu'assemblage lors de l'exécution. Il y a un article CodeProject utilisant Reflexil, un produit GPL basé sur Cecil, qui peut vous aider à trouver des idées ...
Merci pour le lien, c'est très utile! Et donc vous voulez dire, que le seul moyen est de changer le code source avant la compilation, pas après? – abatishchev
Non. Cependant, vous pouvez probablement utiliser quelque chose comme Cecil (http://www.mono-project.com/Cecil) pour injecter dans votre assemblage. Je vais mettre à jour pour inclure cela. –