Как использовать DLL С# в IronPython

Я создал dll с помощью С#. Как использовать DLL в IronPython. Я попытался добавить dll, используя clr.AddReference( "yxz.dll" ). Но это терпит неудачу. Я попытался разместить dll в каталоге выполнения IronPython script. Тем не менее он не заявляет, что "Имя xyz не может быть найдено" при попытке ссылаться на dll.

Ответы

Ответ 1

Я думаю, что он не смог найти файл, потому что он не знает, где его искать, см. здесь для подробного объяснения того, как как работают функции clr.AddReference...().

Ответ 2

import clr    
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll")

- самый простой способ, предложенный Джеффом в комментариях. Это также работает:

import clr
import sys

sys.path.append(r"C:\Folder\Subfolder")  # path of dll
clr.AddReference ("Ipytest.dll") # the dll
import TestNamspace  # import namespace from Ipytest.dll

Ответ 3

Пример создания .NET-классов с помощью приложения IronPython создает сборку (которая впоследствии сохраняется на диске как "DynamicAsm.dll" ), Он содержит класс под названием "DynamicType" с одним статическим методом, называемым "test". Этот метод принимает четыре целых числа и добавляет их вместе.

Приятно то, что это сохраняет "DynamicAsm.dll" на диск. Затем вы можете запустить сеанс интерактивного интерпретатора IronPython и сделать следующее:

>>> import clr
>>> clr.AddReference('DynamicAsm.dll')
>>> import DynamicType
>>> DynamicType.test(2, 3, 4, 5)
14

Обратите внимание, что пример использует имя класса в инструкции import.

Ответ 4

Вы можете использовать это:

import clr 
clr.AddReferenceToFile("yxz.dll")

Ответ 5

Лучше использовать clr.AddReferenceToFile(имя файла), потому что он принимает относительный путь.

import clr 
clr.AddReferenceToFile("xxx.dll")

Затем вы можете импортировать классы путем импорта, как обычно:

import xxx

или

from xxx import *

Я рекомендую вам ознакомиться с этой книгой, это очень полезно. https://play.google.com/store/apps/details?id=com.gavin.gbook

Ответ 6

Я получил это поведение только с консоли IronPython. Когда я запускаю script, это нормально. Когда я запускаю script IronPython, sys.path содержит абсолютный путь к моему текущему рабочему каталогу, так что он работает. Когда я вхожу в консоль, sys.path включает только '.' для текущего рабочего каталога. Это может объяснить разницу в поведении.

Как немного хакерское решение, я создал файл fixpath.py

"""This hacky script fixes the sys.path when I run the ipy console."""

import sys
import os

sys.path.insert(0, os.getcwd())

del sys
del os

Затем я установил переменную среды IRONPYTHONSTARTUP с абсолютным путем к этому файлу. Затем, когда я запускаю консоль IronPython, этот script запускается, а мой sys.path содержит абсолютную ссылку на мой текущий рабочий каталог и последующие вызовы clr.AddReference работают правильно.