2009-03-05 7 views
4

Considérer que j'ai un programme en cours d'exécution, qui devrait faire ce qui suit- Devrait lire du code à partir d'un fichier texte et devrait l'exécuter dans son propre espace d'assemblage afin que le nouveau code en cours d'exécution puisse accéder tous les composants du code sont déjà en cours d'exécution. Comment est-ce possible? Aidez-moi, s'il vous plaît.Générer dynamiquement des modules dans le même espace d'assemblage

+0

Veuillez clarifier ce que vous entendez par «propre espace de montage», «tous les composants» et «code en cours d'exécution» – abhilash

Répondre

0

Je ne sais pas comment fonctionne la magie, mais je regarderais MyGeneration, qui est open source et réalise ce que vous voulez faire. Il peut lire un fichier de C#, VB.Net et JScript, puis compiler/compiler ces scripts et leur donner accès à son propre ensemble de classes et d'assemblages.

2

Par espace d'assemblage, voulez-vous dire AppDomain? Vous voudrez peut-être regarder IronPython. En tant que langage de script, il est mieux adapté pour être ajouté dynamiquement au programme lors de l'exécution.

Sinon:

Vous avez accès au compilateur C# (et VB.NET) via le Microsoft.CSharp.CSharpCodeProvider assis dans System.dll.

Vous pouvez l'utiliser pour compiler ce fichier texte dans une DLL séparée (éventuellement en mémoire). Assurez-vous d'ajouter votre assembly en cours d'exécution comme référence lors de la compilation. Ensuite, vous pouvez

  • charger l'assembly dans l'AppDomain en cours d'exécution. De cette façon, il a accès à tous les objets de votre application. Vous, cependant, ne peut pas décharger le code à nouveau. Vous devrez décharger l'AppDomain entier (c'est-à-dire votre application)
  • charger l'assembly dans un AppDomain distinct. Vous devrez explicitement fournir l'accès à certains de vos objets via Remoting (ou d'autres méthodes de communication en cours), mais vous pouvez décharger/remplacer le code au cas où le fichier texte changerait.

De toute façon, vous devrez utiliser la réflexion pour appeler votre code chargé dynamiquement.

Questions connexes