Mam kilka typów w C# biblioteki pisałem, np:Dlaczego nie mogę zaimportować mojego C# do IronPython?
namespace SprocGenerator.Generators
{
public class DeleteGenerator : GeneratorBase
{
public DeleteGenerator(string databaseName, string tableName) : base(databaseName, tableName)
chcę je wykorzystać w skrypcie IronPython:
import clr
import sys
clr.AddReferenceToFile("SprocGenerator.dll")
# problem happens here:
from SprocGenerator.Generators import *
generator = DeleteGenerator("a", "b")
Gdy linia pod komentarzem dzieje, mam:
ImportError: No module named Generators
i sprawdzeniu, czy plik wczytuję to, czego można oczekiwać przez zmianę jego nazwy i weryfikacji skrypt wygeneruje błąd podczas próby załadowania montaż. Sprawdziłem, czy przestrzeń nazw znajduje się w zespole za pośrednictwem reflektora. Próbowałem również określić w pełni kwalifikowaną nazwę klasy, aby obejść problem z importowaniem, np.
generator = SprocGenerator.Generators.DeleteGenerator("a", "b")
Ale otrzymuję:
NameError: name 'SprocGenerator' is not defined
Nawet jeśli mam to w C#:
namespace SprocGenerator
{
public static class GeneratorHelper
{
public static string GetTableAlias(string tableName)
I to w IP:
import clr
import sys
from System import *
clr.AddReferenceToFile("SprocGenerator.dll")
from SprocGenerator import *
print "helper = " + GeneratorHelper.GetTableAlias("companyBranch")
otrzymuję ten błąd:
NameError: global name 'GeneratorHelper' is not defined
Co robię źle?
Na jakiej platformie zbudowany jest program SprocGenerator.dll? Czy problem może polegać na tym, że proces, w którym używasz programu IronPython, nie może obsłużyć "architektury" biblioteki DLL? Na przykład, jeśli używasz IronPython z 32-bitowej konsoli, a SprocGenerator.dll jest zbudowany na 64-bit. – Jacob
@Jacob - To był dokładnie ten problem, który miałem.Użycie 32-bitowej wersji mojego interpretera python naprawiło to. – arviman