Problém s použitím IronPython kódu proti sestavení .NET konkrétně app.config aspektem

hlasů
2

Začal jsem při pohledu do IronPython vyvinout skripty proti mé .NET sestav pro určité úkoly a ad-hoc procesy. Líbí se mi jednoduchost vývoje s IronPython a malé rozměry ve srovnání s manipulace to s projektem .NET aplikace konzoly. Nicméně, já hned běžel do zátarasu s nastavením z app.config souboru. Sestavy Mám v plánu použít vyžadovat nastavení z app.config souboru, jako je připojení k databázi řetězec, nastavení aplikace atd jsem viděl tuto otázku na SO Jak používat IronPython s App.config . Nicméně z toho, co jsem pochopil, a předpokládám, žádný z navrhovaných řešení nepomohlo nebo byly přijatelné. Úpravě ipy.exe.config soubor má potenciál. Nicméně bych rád, aby to tak jednoduché, jak je to možné a minimalizovat závislostí. Takže každý může chytit skript IronPython a spusťte jej, aniž by museli měnit ipy.exe.config souboru.

Tak jsem se rozhodl zkusit následující: I vytvořit novou aplikační doménu ve scénáři a mají AppDomainSetup.ConfigurationFile bod k souboru app.config. Pak jsem mohl zavolat AppDomain.DoCallBack a předat delegáta, který má svou logiku. Tak dole je skript, který má svůj pokus. Všimněte si, že jsem jen učení IronPython / Python, takže mějte na paměti.

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()

Ve výše uvedeném kódu, „c: \ MyApp“ složka obsahuje vše; exe, DLL a souboru App.config. Doufejme, že druhá AppDomain bude používat MyApp.exe.config. Metoda CallbackAction má obsahovat kód, který bude používat rozhraní API z .NET sestavení dělat nějakou práci. CallbackAction bude iniciována prostřednictvím appDomain.DoCallBack. No, to je ta část, Mám problém. Je-li appDoming.DoCallBack vykonán, dostanu System.Runtime.Serialization.SerializationException:

Nelze serializovat delegáty přes neřízených ukazatelů funkcí a dynamických metod nebo vně sestavy delegáta tvůrce.

Nemohu provést kompletní smysl z toho. Domnívám se, že něco, co se pokusil o serializaci přes AppDomains a že operace se nedaří. Mohu vytvořit CrossAppDomainDelegate a vykonat to v pohodě.

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

Takže má někdo nějaké nápady nebo doporučení? V podstatě, musím mít sestavení, které chci, aby kód proti v IronPython mít přístup ke spisu app.config.

Díky za váš čas a doporučení předem.

btw mám IronPyhton 2.0.1 nainstalován a používám VS2008 Pro.

Položena 27/08/2009 v 02:43
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

To asi není odpověď, kterou hledáte, ale .... Vzhledem k tomu je pro své vlastní účely testování, doporučoval bych instalaci IronPython 2.7.1 a zjistit, zda problém přetrvává. Tam bylo mnoho vylepšení pro IronPython od 2.0.1.

Odpovězeno 10/01/2012 v 00:00
zdroj uživatelem

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