Problème d'utilisation IronPython au code contre des assemblages .NET spécifiquement avec app.config aspect

voix
2

J'ai commencé à regarder dans IronPython pour développer des scripts contre mes ensembles .NET pour certaines tâches et processus ad hoc. J'aime la facilité de développement avec IronPython et le faible encombrement par rapport à la manipulation de ce avec un projet d'application de console .NET. Cependant, je me suis immédiatement tombé sur un barrage routier avec les paramètres de fichier app.config. Les assemblées je prévois d'utiliser nécessitent des paramètres à partir du fichier app.config tels que la chaîne de connexion de base de données, les paramètres d'application, etc. J'ai vu cette question sur le SO Comment utiliser IronPython avec App.Config . Cependant, d'après ce que je crois et je suppose, aucune des solutions proposées a fonctionné ou étaient acceptables. Modification de fichier ipy.exe.config a un potentiel. Cependant, je voudrais garder ce aussi simple que possible et minimiser les dépendances. Alors que tout le monde peut saisir le script IronPython et l' exécuter sans avoir à modifier le fichier ipy.exe.config.

Je décide donc d'essayer ce qui suit: créer un nouveau domaine d'application dans le script et ont AppDomainSetup.ConfigurationFile points dans le fichier app.config. Ensuite , je pourrais appeler AppDomain.DoCallBack et passer un délégué qui a ma logique. Donc , ci - dessous est le script qui a ma tentative. Notez que je suis l' apprentissage tout IronPython / Python donc s'il vous plaît garder cela à l' esprit.

import clr
import sys
sys.path.append(rC:\MyApp);
clr.AddReference(System)
clr.AddReference(Foo.dll)

from System import *
from System.IO import Path
from Foo import *

def CallbackAction():
    print Callback action    

baseDirectory = rC:\MyApp
domainInfo = AppDomainSetup()
domainInfo.ApplicationBase = baseDirectory
domainInfo.ConfigurationFile = Path.Combine(baseDirectory,MyApp.exe.config)
appDomain = AppDomain.CreateDomain(Test AppDomain,AppDomain.CurrentDomain.Evidence,domainInfo)

appDomain.DoCallBack(CallbackAction)  #THIS LINE CAUSES SERIALIZATION EXCEPTION

Console.WriteLine(Hit any key to exit...)
Console.ReadKey()

Dans le code ci-dessus, c: \ MyApp dossier contient tout; exe, dll, et le fichier app.config. Espérons que le deuxième appdomain utilisera MyApp.exe.config. méthode CallbackAction est destiné à contenir le code qui utilisera le api des assemblages .NET pour faire un travail. CallbackAction sera invoqué par appDomain.DoCallBack. Eh bien, c'est la partie que j'ai un problème. Lorsque appDoming.DoCallBack est exécuté, je reçois un System.Runtime.Serialization.SerializationException:

Impossible de sérialiser délégués sur des pointeurs de fonction non gérés, les méthodes dynamiques ou des méthodes en dehors de l'assemblée du créateur de délégué.

Je ne peux pas faire un sens complet sur ce sujet. Je suppose que quelque chose est tenté d'être publié en feuilleton dans AppDomains et cette opération échoue. Je peux créer un CrossAppDomainDelegate et l'exécuter très bien.

test = CrossAppDomainDelegate(lambda: CallbackAction())
test()

Alors que quelqu'un a des idées ou des recommandations? En gros, je dois avoir les assemblées que je veux coder contre dans IronPython d'avoir accès au fichier app.config.

Merci pour votre temps et recommandations à l'avance.

BTW Je IronPyhton 2.0.1 installé et je utilise Pro VS2008.

Créé 27/08/2009 à 02:43
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Ceci est probablement pas la réponse que vous cherchez, mais .... Comme cela est pour vos fins de test, je vous recommande d'installer IronPython 2.7.1 et voir si le problème persiste. Il y a eu de nombreuses améliorations à IronPython depuis 2.0.1.

Créé 10/01/2012 à 00:00
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more