Python для .NET "не удалось найти сборку"
Я использую CPython, и у меня есть dll С#. Я пытаюсь использовать Python для .NET, чтобы заставить их говорить. Я не могу использовать IronPython, потому что мне нужно интегрировать его в существующую систему CPython.
Я полностью новичок в Python для .NET, и у меня на самом деле очень мало опыта работы с Python и нет опыта работы с С#. Поэтому, пожалуйста, простите меня, если мой вопрос кажется очень простым.
Я использую Python 2.7.3, и я скачал
pythonnet-2.0-alpha2-clr2.0_131_py27_UCS2 и распакуйте его в папку с именем pyfornet_test, которая также содержит DLL, которую я пытаюсь использовать (DotNet4Class.dll)
Затем я запускаю это:
import sys
import os
import clr
sys.path.append(r"C:\pyfornet_test")
clr.AddReference("DotNet4Class.dll")
Что дает мне эту ошибку:
System.IO.FileNotFoundException: Unable to find assembly 'DotNet4Class.dll'.
at Python.Runtime.CLRModule.AddReference(String name) in C:\Users\Barton\Documents\Visual Studio 2008\Projects\PyShar
p\trunk\pythonnet\src\runtime\moduleobject.cs:line 375
Любые советы будут высоко оценены. Спасибо!
Ответы
Ответ 1
DotNet4Class.dll
построен на .NET 4? Я полагаю, так на основе имени DLL.
Обратите внимание на проблему здесь: http://sourceforge.net/tracker/?func=detail&aid=3293169&group_id=162464&atid=823891
clr.AddReference fails when assembly is built with.NET 4.0 - ID: 3293169
Я бы прочитал решение, но, по сути, вам нужно пересобрать и перекомпилировать проект python для .NET в .NET 4.
Я также упомяну, что подобные проекты, которые активно не разрабатываются и не используются многими людьми, обычно имеют тонкие особенности, которые делают знание платформы необходимым для решения таких проблем, как эта. Похоже, вы пытаетесь взломать это решение, не разбираясь в Python или .NET, которые всегда будут чреваты проблемами.
Ответ 2
Попробуйте это (без расширения .dll
):
clr.AddReference(r"C:\pyfornet_test\DotNet4Class")
Ответ 3
У меня есть такой код (я устанавливаю MyRightClickMenuService.dll в том же каталоге, что и мое основное приложение). Он построен против .Net 4.0.
import clr
import os
import sys
sys.path.append(os.path.dirname(__file__))
clr.AddReference('MyRightClickMenuService')
clr.AddReference('System')
clr.AddReference('System.Security')
from MyRightClickMenuService import (
AclSecuredNamedPipeBinding,
MyMenuItem,
MyContextMenuService,
etc
)
Ответ 4
Вы пытались clr.FindAssembly?
import clr
import sys
assemblydir = r"C:\pyfornet_test"
assemblypath = r"C:\pyfornet_test\DotNet4Class.dll"
sys.path.append(assemblydir)
clr.FindAssembly(assemblypath)
Я не знаю, почему это работает, но этот код работает на моем компьютере (Python 2.7,.NET4)
Ответ 5
Одной из причин может быть то, что Windows не позволяла загружаться из "внешних источников". Чтобы это исправить:
- Щелкните правой кнопкой мыши на .dll
- "Свойства"
- В разделе "Общие" нажмите "Разблокировать"