IronPythonを調べて、特定のタスクとアドホックプロセス用の.NETアセンブリに対してスクリプトを開発しました。私はIronPythonの開発が容易で、.NETコンソールアプリケーションプロジェクトでこれを処理するのに比べて実装面積が小さいことが好きです。しかし、私はすぐにapp.configファイルの設定でロードブロッキングを実行しました。私が使用しようとしているアセンブリでは、データベース接続文字列、アプリケーション設定などapp.configファイルの設定が必要です。私はこの質問をSO How to use IronPython with App.Configに見ました。しかし、私が集めて推測していることから、示唆された解決法はどれもうまくいったり、受け入れられなかった。 ipy.exe.configファイルの変更には潜在的な問題があります。しかし、私はこれをできるだけシンプルに保ち、依存関係を最小限に抑えたいと考えています。誰でもIronPythonスクリプトを取得し、ipy.exe.configファイルを変更することなく実行できます。IronPythonを使用して、特に、app.configのアスペクトを持つ.NETアセンブリをコード化する際の問題
私は次のことを試すことにしました。スクリプト内に新しいアプリケーションドメインを作成し、AppDomainSetup.ConfigurationFileにapp.configファイルを指定しました。それから私はAppDomain.DoCallBackと呼び出し、私のロジックを持つ代理人を渡すことができます。以下は私の試行をしているスクリプトです。私はIronPython/Pythonを学習しているので、心に留めてください。
import clr
import sys
sys.path.append(r"C:\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 = r"C:\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()
上記のコードでは、「c:\ MyApp」フォルダにはすべてが含まれています。 exe、dll、およびapp.configファイルが含まれています。おそらく、2番目のappDomainはMyApp.exe.configを使用します。 CallbackActionメソッドは、.NETアセンブリからのapiを使用して作業を行うコードを格納するためのものです。 CallbackActionはappDomain.DoCallBackを介して呼び出されます。これは私が問題を抱えている部分です。 appDoming.DoCallBackが実行されると、私はSystem.Runtime.Serialization.SerializationExceptionを得る:
は デリゲート作成者のアセンブリ外 アンマネージ関数ポインタ、ダイナミック 方法または方法に比べて、デリゲートをシリアル化することはできません。
私はこれを完全に理解することはできません。私は、何かがappDomainsを介してシリアル化しようとしていると仮定し、その操作は失敗しています。私はCrossAppDomainDelegateを作成し、それをうまく実行することができます。
test = CrossAppDomainDelegate(lambda: CallbackAction())
test()
だれでもアイデアや推奨事項はありますか?基本的には、IronPythonでコード化したいアセンブリをapp.configファイルにアクセスする必要があります。
お時間をいただきありがとうございます。
btw私はIronPyton 2.0.1をインストールしており、VS2008 Proを使用しています。