2013-05-08 3 views
5

У меня серьезные проблемы с загрузкой переносимой библиотеки .NET (которая будет использоваться в стандартных средах .NET и Silverlight) из сценария Python.Как загрузить переносимую библиотеку .NET в скрипт Iron Python?

Версия файла. NET DLL - 4.0.3.319.233 (System.Core.DLL), IronPython - 2.7.1, работающий в режиме 32bit/x86. Visual Studio 2010 с C# в .NET 4. Также добавлена ​​версия Microsoft .NET KB2468871 для использования портативной библиотеки (версия 2).

При попытке загрузить библиотеку из сценария Python:

clr.AddReferenceToFileAndPath(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll") 

не может быть доступен, и когда скрипт достигает тип, он говорит: «атрибут [тип в портативных сборках ] 'namespace #' только для чтения " , указывающий, что сборка не была загружена вообще (или как Silverlight и не может использоваться скриптом Python).

Изменение кода: (класс Ассамблеи от System.Reflection)

PortableAssembly = Assembly.LoadFrom(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll") # load through .NET Reflection, Python won't load Portable assembly properly! 
clr.AddReference(PortableAssembly) 

приводит к ошибке: exceptions.IOError происшедшие Сообщение: [Errno 2] Не удалось загрузить файл или сборку «System .Core, Version = 2.0.5.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e, Retargetable = Yes 'или одна из его зависимостей. Система не может найти указанный файл.

Последний код, похоже, работает, когда скрипт Python вызывается автоматически из другой .NET-программы, создавая экземпляр собственного Python-движка, но дает указанную выше ошибку, когда сценарий выполняется из проекта Python в Visual Studio. Настройки Python в VisualStudio, Tools \ Options \ Python Tools \ Interpreter Options предназначены для режима x86/32bit. Все параметры среды показывают, что используется .NET 4.

Теперь у меня есть несколько способов исправить это из созданного C#/.NET сгенерированного Python-движка, но как загрузить переносимую сборку в базовую среду выполнения IronPython, чтобы она работала в правильной среде .NET 4 , не пытаясь загрузить какой-либо материал .NET 2?

Обновление: Я перезапустил и перестроил свою портативную библиотеку после обновления MS KB2468871, а также удалил инструменты IronPython и Python для VS, заменив их версиями 2.7.3 и 1.5 (VS2010). Ошибка с «System.Core, Version = 2.0.5.0» все еще происходит.

+0

Вы нашли решение этой проблемы? Я столкнулся с этим уже 2 дня, и я не могу заставить его работать. –

ответ

-1

использование sys.path добавить трактов туда, где ваши .net библиотеки являются:

import sys 
sys.path.append("c:\MyDotNetDir"); 

import clr 
clr.AddReference("MyDotNetAssembly.dll") 

# do not forget to import the namespace 

import Erik.MyDotNetAssemblyNamespace 

inst = Erik.MyDotNetAssemblyNamespace.MyDotNetObject() 
+0

Хотя FileNotFoundException, похоже, отсутствует в сборке, ссылки на портативную библиотеку обрабатываются специальными, и это исключение указывает, что кто-то неправильно загружает нас. –

0

FileNotFoundException является признаком того, что что-то загружает сборки с использованием Assembly.LoadFile вместо Assembly.LoadFrom, но не обрабатывает правильность сборки. Я не уверен, как работает код Python в Visual Studio, но если вы можете запустить любой код начальной загрузки до того, как переносная сборка была загружена, попробуйте код, который я показал здесь: PCL Retargetable Assembly not redirected inside MS CRM Plugin.

Смежные вопросы