Встраивание IronPython - невозможно добавить ссылку на систему

Я встраиваю IronPython в свое приложение C #. У меня почему-то возникают проблемы с загрузкой сборок. В частности, мне нужен System.dll, чтобы иметь доступ к классам .NET, таким как DateTime.

Если я попробую строку:

_runtime.LoadAssembly(_runtime.Host.PlatformAdaptationLayer.LoadAssembly("System"));

Я получил:

could not load file or assembly 'System'

Если я явно введу путь к C: /WINDOWS/Microsoft.NET /.../ System.dll, я получу:

The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

Итак, я попытался выполнить импорт с помощью clr внутри скрипта Python:

import clr
clr.AddReference('System')
from System import DateTime

И теперь я получаю:

Cannot import name DateTime

Где я ошибаюсь? Почему DateTime отсутствует в системе и почему LoadAssembly не может найти System.dll? Нужно ли мне явно указывать пути поиска для IronPython? Находит ли он недействительную «Систему»?

Все это отлично работает, когда я тестирую в интерпретаторе IronPython.


person cgyDeveloper    schedule 08.09.2009    source источник


Ответы (1)


Я использую engine.Runtime.LoadAssembly(typeof(string).Assembly);, чтобы загрузить системную сборку; Я считаю, что это то же самое, что и в консоли IronPython.

P.S. Не забывайте, что доступен исходный код IronPython; это золотая жила для подобных вещей.

person Jeff Hardy    schedule 08.09.2009
comment
Спасибо, мне действительно стоит покопаться и посмотреть, что еще я могу найти. - person cgyDeveloper; 08.09.2009
comment
Какой модуль мне нужно импортировать, чтобы вызвать engine.Runtime.LoadAssembly ()? - person Tim Lovell-Smith; 23.03.2010
comment
Он должен быть в классе ScriptRuntime в Microsoft.Scripting.dll. Насколько я могу судить, это не метод расширения. По крайней мере, это для IronPython 2.6. - person Jeff Hardy; 23.03.2010