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
  • "Свойства"
  • В разделе "Общие" нажмите "Разблокировать"