2013-05-08 28 views
5

Tôi gặp sự cố nghiêm trọng khi tải thư viện .NET di động (được sử dụng trong môi trường .NET và Silverlight chuẩn) từ tập lệnh Python.Làm thế nào để tải thư viện .NET di động trong tập lệnh Iron Python?

Phiên bản tệp DLL .NET là 4.0.3.319.233 (System.Core.DLL), IronPython là 2.7.1, chạy ở chế độ 32bit/x86. Visual Studio 2010 với C# trong .NET 4. Microsoft .NET update KB2468871 để sử dụng thư viện di động cũng được cài đặt (Phiên bản 2).

Nếu tôi cố gắng để tải thư viện từ kịch bản Python:

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

nó không thể được truy cập, và khi kịch bản đạt đến một loại, nó nói: "thuộc tính [gõ vào lắp ráp cầm tay ] của 'namespace #' là chỉ đọc " cho biết assembly không được tải ở tất cả (hoặc dưới dạng Silverlight và không thể được sử dụng bởi tập lệnh Python).

Thay đổi mã để: (lớp hội từ System.Reflection)

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

kết quả trong một lỗi: exceptions.IOError xảy ra nhắn: [Errno 2] Không thể tải tập tin hoặc lắp ráp 'Hệ thống .Core, Phiên bản = 2.0.5.0, Văn hóa = trung lập, PublicKeyToken = 7cec85d7bea7798e, Retargetable = Yes 'hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy các tập tin được chỉ định.

Mã cuối cùng có vẻ hoạt động, khi tập lệnh Python được gọi tự động từ bên trong chương trình .NET khác. Cài đặt Python trong VisualStudio, Công cụ \ Tùy chọn \ Công cụ Python \ Tùy chọn Phiên dịch dành cho chế độ x86/32bit. Tất cả các tham số môi trường cho thấy .NET 4 được sử dụng.

Tôi đã có nhiều cách để khắc phục sự cố từ một công cụ Python được tạo bằng C# /. NET, nhưng làm cách nào tôi có thể tải cụm lắp ráp di động trong môi trường thời gian chạy IronPython cơ bản để hoạt động trong môi trường .NET 4 chính xác. , không cố tải bất kỳ thứ gì .NET 2?

Cập nhật: Tôi khởi động lại và xây dựng lại thư viện di động sau bản cập nhật MS KB2468871, đồng thời gỡ cài đặt công cụ IronPython và Python cho VS, thay thế chúng bằng phiên bản 2.7.3 và 1.5 (VS2010). Đã xảy ra lỗi với 'System.Core, Version = 2.0.5.0'.

+0

Bạn đã tìm thấy giải pháp cho vấn đề này chưa? Tôi phải đối mặt với điều này trong 2 ngày và tôi không thể làm việc đó. –

Trả lời

-1

sử dụng sys.path thêm pathes đến nơi dlls .net của bạn là:

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

Trong khi FileNotFoundException dường như bị thiếu lắp ráp, tham chiếu thư viện di động được xử lý đặc biệt và ngoại lệ này cho biết rằng ai đó đang tải chúng tôi không chính xác. –

0

Các FileNotFoundException là một dấu hiệu cho thấy một cái gì đó đang tải các hội đồng sử dụng Assembly.LoadFile thay vì Assembly.LoadFrom, nhưng không xử lý chính sách lắp ráp chính xác. Tôi không chắc làm thế nào mã Python trong Visual Studio hoạt động, nhưng nếu bạn có thể chạy bất kỳ mã bootstrapper trước khi lắp ráp di động đã được nạp, hãy thử mã mà tôi đã hiển thị ở đây: PCL Retargetable Assembly not redirected inside MS CRM Plugin.

Các vấn đề liên quan