J'ai un script IronPython 2.6/2.7 que j'écris et qui importe beaucoup d'assemblages.Importer des assemblages dans IronPython à partir d'un autre assemblage
En d'autres termes, en haut du script, il le fait ...
clr.AddReference("System.Xml")
import System.Xml
Sauf qu'il ne le fait pas pour 1 assemblage, mais pour 10 ensembles.
Certains des modules sont des assemblys .NET intégrés et certains sont des assemblages que j'ai réalisés.
Je voudrais simplifier mon script pour qu'il charge un assemblage que je vais construire. Je veux ensuite appeler une méthode dans cet assembly qui fera les "AddReference" et "importer" pour les 10 assemblages. Le but principal de tout ceci est de minimiser la longueur/complexité du script.
Donc à la fin je voyais fonctionner comme cette
clr.AddReferenceToFileAndPath("d:\\myassembly")
import MyAssembly
MyAssembly.ImportAllAssembliesIReallyWant()
Mes problemis de base malgré la lecture de toutes les informations que je pouvais trouver sur ScriptRuntime, ScriptEngine, champs, etc. - je ne peux toujours pas comprendre comment écrire une méthode dans "MyAssembly" qui affecte quels modules sont chargés dans le script appelant.
Dino, j'ai décidé d'essayer la première méthode que vous avez écrite: créer un module. Jusqu'à présent, cela résout la moitié de mon problème. Donc, suivant cette technique dans l'initialisation de mon module, il prend soin de faire l'équivalent de "clr.AddReferenceToFileAndPath" mais la partie restante que je dois encore couvrir: faire l'équivalent de "import MyAssembly". Comment puis-je réaliser l'importation dans le module? – namenlos
Ce que vous pouvez faire est quelque chose comme: –
Une manière grossière de faire ceci serait d'obtenir les types exportés de l'assemblée (il y a une méthode sur les objets d'assemblage pour faire cela) puis appelez DynamicHelpers.GetPythonTypeFromType pour chaque type et collez le résultat dans le dictionnaire que PerformModuleReload vous donne. Ensuite, votre utilisateur peut faire à partir de mymodule import * et il obtiendra tout ce qui est dans l'assemblage. –