Ho alcuni tipi in una libreria C# che ho scritto, ad esempio:Perché non posso importare il mio tipo C# in IronPython?
namespace SprocGenerator.Generators
{
public class DeleteGenerator : GeneratorBase
{
public DeleteGenerator(string databaseName, string tableName) : base(databaseName, tableName)
voglio usarle in uno script IronPython:
import clr
import sys
clr.AddReferenceToFile("SprocGenerator.dll")
# problem happens here:
from SprocGenerator.Generators import *
generator = DeleteGenerator("a", "b")
Quando la linea sotto il commento accade, ottengo:
ImportError: No module named Generators
ho verificato che il file che sto caricando è quello che mi aspetto rinominandolo e verificando lo script genera un errore quando si cerca di caricare l'assembly. Ho verificato che lo spazio dei nomi sia nell'assembly tramite Reflector. Ho anche provato a specificare un nome di classe completo per ovviare al mio problema di importazione, ad es.
generator = SprocGenerator.Generators.DeleteGenerator("a", "b")
ma ottengo:
NameError: name 'SprocGenerator' is not defined
Anche se ho questo in C#:
namespace SprocGenerator
{
public static class GeneratorHelper
{
public static string GetTableAlias(string tableName)
E questo a IP:
import clr
import sys
from System import *
clr.AddReferenceToFile("SprocGenerator.dll")
from SprocGenerator import *
print "helper = " + GeneratorHelper.GetTableAlias("companyBranch")
ottengo questo errore:
NameError: global name 'GeneratorHelper' is not defined
Cosa sto sbagliando?
Quale piattaforma è SprocGenerator.dll costruito per? Il problema potrebbe essere che il processo in cui stai eseguendo il programma IronPython non è in grado di gestire "l'architettura" della DLL? Ad esempio, se stai eseguendo IronPython da una console a 32 bit, SprocGenerator.dll è stato creato per 64 bit. – Jacob
@Jacob - Questo era esattamente il problema che avevo.L'uso della versione a 32 bit del mio interprete python lo ha risolto. – arviman