我創建了一個簡單的python類,並將它的類型傳遞給.Net程序集,該程序試圖使用以下實例化它:Assembly.CreateInstance()或AppDomain.CreateInstanceAndUnwrap()不適用於IronPython類
AppDomain.CurrentDomain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName);
這引發FileNotFoundException。
type.Assembly.FullName == 'Snippets.scripting, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
我可以在AppDomain.CurrentDomain中找到Assembly的名稱,所以我相信我沒關係。
爲了進一步縮小下來我嘗試:
type.Assembly.CreateInstance(type.FullName)
在這種情況下,我得到一個MissingMethodException。下面是一個簡單的例子,演示了這一點:
IronPython 2.7 (2.7.0.40) on .NET 4.0.30319.239
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> import System
>>> class foo(System.Object):
... pass
...
>>> type = clr.GetClrType(foo)
>>> type.Assembly.CreateInstance(type.FullName)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Constructor on type 'IronPython.NewTypes.System.Object_1$1' not
found.
>>> for ctor in type.GetConstructors():
... print ctor
...
Void .ctor(IronPython.Runtime.Types.PythonType)
.Net只看到1個構造函數,並且需要參數。我需要我的類不需要任何參數,以便CreateInstance可以工作。我無法修改CreateInstance調用來添加參數 - 這不是我的代碼。
在這一點上,我正在吠叫錯誤的樹,或者我需要一種方法來創建一個具有不需要任何參數的構造函數的IronPython類。
謝謝!這對於第二個問題非常有用。 type.Assembly.CreateInstance(type.FullName)現在完美工作。 不幸的是,我原來的問題仍然存在。嘗試通過AppDomain調用它時,我仍然收到FileNotFound異常,所以我仍然有一些挖掘工作要做。 我目前正在尋找這樣做的http://www.voidspace.org.uk/ironpython/dynamically_compiling.shtml來動態編譯一個C#類。我會創建一個DLL,但我還有其他一些問題。 – sherbang
成功!我需要添加一個ResolveHandler來查找程序集,現在可以使用。 AppDomain.CurrentDomain.AssemblyResolve + = ResolveHandler – sherbang