2013-05-08 10 views
5

Mam poważne problemy z ładowaniem przenośnej biblioteki .NET (do użycia w standardowym środowisku .NET i Silverlight) ze skryptu w języku Python.Jak załadować przenośną bibliotekę .NET w skrypcie Iron Python?

. Wersja pliku DLL w wersji 4.0.3.319.233 (System.Core.DLL), IronPython to 2.7.1, działa w trybie 32bit/x86. Visual Studio 2010 z C# w .NET 4. Zainstalowana jest także aktualizacja Microsoft .NET KB2468871 dla biblioteki przenośnej (wersja 2).

Gdy próbuję załadować biblioteki ze skryptu Pythona:

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

nie mogą być dostępne, a gdy ten skrypt osiąga typ, to mówi: „atrybut [typ przenośnego w zespole ] 'namespace #' jest tylko do odczytu " wskazując, że zestaw nie został załadowany w ogóle (lub jako Silverlight i nie może być używany przez skrypt Python).

Zmiana kodu do: (klasy Assembly z System.Reflection)

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

powoduje błąd: Wystąpił exceptions.IOError Wiadomość: [ERRNO 2] Nie można załadować pliku lub zestawu „system .Core, Version = 2.0.5.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e, Retargetable = Yes 'lub jedna z jego zależności. System nie może odnaleźć określonego pliku.

Ostatni kod wydaje się działać, gdy skrypt w języku Python jest wywoływany automatycznie z poziomu innego programu .NET, tworząc instancję własnego silnika Python, ale podaje powyższy błąd, gdy skrypt jest wykonywany z projektu Python w Visual Studio. Ustawienia Pythona w VisualStudio, Tools \ Options \ Python Tools \ Interpreter Options są dla trybu x86/32bit. Wszystkie parametry środowiska pokazują, że .NET 4 jest używany.

Mam wiele sposobów, aby rozwiązać ten problem z silnika Pythona wygenerowanego w języku C#/.NET, ale jak mogę załadować przenośny zespół w podstawowe środowisko wykonawcze IronPython, aby działał w poprawnym środowisku .NET 4 , nie próbując załadować żadnych rzeczy .NET 2?

Aktualizacja: Po aktualizacji MS KB2468871 zrestartowałem i przebudowałem moją bibliotekę przenośną, a także odinstalowałem narzędzia IronPython i Python dla VS, zastępując je wersjami 2.7.3 i 1.5 (VS2010). Błąd z "System.Core, wersja = 2.0.5.0" nadal występuje.

+0

Czy znalazłeś rozwiązanie tego problemu? Mam do czynienia z tym od 2 dni i nie mogę go uruchomić. –

Odpowiedz

-1

użycie sys.path dodać pathes do gdzie .net DLL są:

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

Podczas gdy FileNotFoundException wydaje się brakować zespołu, przenośne odniesienia do biblioteki traktowane są jako specjalne, a ten wyjątek wskazuje, że ktoś ładuje nas niepoprawnie. –

0

FileNotFoundException jest wskazanie, że coś się ładuje zespoły użyciu Assembly.LoadFile zamiast Assembly.LoadFrom, ale nie obchodzenia zasady poprawnego montażu. Nie jestem pewien, jak działa kod Pythona w Visual Studio, ale jeśli możesz uruchomić dowolny kod bootstrapper przed załadowaniem zespołu przenośnego, wypróbuj kod, który tutaj pokazałem: PCL Retargetable Assembly not redirected inside MS CRM Plugin.

Powiązane problemy