Tôi có một số loại trong một thư viện C# tôi đã viết, ví dụ:Tại sao tôi không thể nhập loại C# của mình vào IronPython?
namespace SprocGenerator.Generators
{
public class DeleteGenerator : GeneratorBase
{
public DeleteGenerator(string databaseName, string tableName) : base(databaseName, tableName)
Tôi muốn sử dụng chúng trong một kịch bản IronPython:
import clr
import sys
clr.AddReferenceToFile("SprocGenerator.dll")
# problem happens here:
from SprocGenerator.Generators import *
generator = DeleteGenerator("a", "b")
Khi dòng dưới comment xảy ra, tôi nhận được:
ImportError: No module named Generators
Tôi đã xác minh rằng tệp tôi đang tải là những gì tôi mong đợi bằng cách đổi tên tệp và xác minh tập lệnh sẽ phát ra lỗi khi cố gắng tải cụm. Tôi đã xác minh không gian tên nằm trong assembly thông qua Reflector. Tôi cũng đã cố gắng chỉ định một tên lớp đủ điều kiện để giải quyết vấn đề nhập của tôi, ví dụ:
generator = SprocGenerator.Generators.DeleteGenerator("a", "b")
Nhưng tôi nhận được:
NameError: name 'SprocGenerator' is not defined
Thậm chí nếu tôi có điều này trong C#:
namespace SprocGenerator
{
public static class GeneratorHelper
{
public static string GetTableAlias(string tableName)
Và điều này trong IP:
import clr
import sys
from System import *
clr.AddReferenceToFile("SprocGenerator.dll")
from SprocGenerator import *
print "helper = " + GeneratorHelper.GetTableAlias("companyBranch")
tôi nhận được lỗi này:
NameError: global name 'GeneratorHelper' is not defined
Tôi đang làm gì sai?
SprocGenerator.dll được xây dựng trên nền tảng nào? Có thể vấn đề là quá trình mà bạn đang chạy chương trình IronPython không thể xử lý "kiến trúc" của DLL? Ví dụ, nếu bạn đang chạy IronPython từ một giao diện điều khiển 32-bit, và SprocGenerator.dll được xây dựng cho 64-bit. – Jacob
@Jacob - Đây chính là vấn đề tôi gặp phải.Sử dụng phiên bản 32 bit của trình thông dịch python của tôi đã sửa nó. – arviman