Я создал простой класс python и передаю его тип сборке .Net, которая пытается создать его экземпляр, используя:
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, так что я считаю, что у меня все в порядке.
Чтобы еще больше сузить его, я попытался:
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 с конструктором, не требующим никаких аргументов.