Как использовать C # dll в IronPython - PullRequest
14 голосов
/ 29 июля 2009

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

Ответы [ 6 ]

11 голосов
/ 08 января 2013
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
8 голосов
/ 29 июля 2009

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

3 голосов
/ 29 июля 2009

Пример Создание классов .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.

0 голосов
/ 27 июля 2015

Я получил это поведение только из консоли IronPython. Когда я запускаю скрипт, это нормально. Когда я запускаю скрипт 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, запускается этот скрипт, и мой sys.path включает абсолютную ссылку на мой текущий рабочий каталог, а последующие вызовы clr.AddReference работают правильно.

0 голосов
/ 24 августа 2014

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

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

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

import xxx

или

from xxx import *

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

0 голосов
/ 17 января 2013

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

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