2016-10-14 1 views
3

J'essaie de me référer à l'assembly qui a des points dans l'espace de noms.Ajout d'une référence à l'assembly .net avec des points dans le nom et l'espace de noms

sys.path.append(assemblyPath) 

clr.FindAssembly(r"isc.Eng.Hov") 
clr.AddReference(r"isc.Eng.Hov") 

print 'isc.Eng.Hov' in clr.ListAssemblies(False) 

from isc.Eng.Hov import * 

interprète soulève une erreur:

Traceback (most recent call last): 
True 
    File "/mnt/86f8c6c8-9099-4f32-be68-486a12918546/GoogleDrive/__BACKLOG/RMK_API_LIB/rmkSuppliersDLLswrappers/scr/Hoval/__phex_hoval_dllwrapper.py", line 14, in <module> 
    from isc.Eng.Hov import * 
ImportError: No module named isc.Eng.Hov 

Comment résoudre?

+0

J'essayais aussi 'imp.find_module ('isc.Eng.Hov')' sans succès –

+0

isc.Eng.Hov est votre espace de noms dans l'assemblage? Utilisez clr.AddReference (assembly_name_with_path_without_ext). – denfromufa

+0

L'espace de noms appelé "HovEngine". Voir la capture d'écran ici: ! [Screenshot] (https://www.dropbox.com/s/twnbdgaramf7isk/Capture.PNG?dl=0), Puis j'ai essayé 'clr.AddReference (r"/mnt/86f8c6c8 -9099-4f32-be68-486a12918546/GoogleDrive/__ BACKLOG/RMK_API_LIB/rmkSuppliersDLLswrappers/scr/Hoval/isc.Eng.Hov ")' Il ya une autre erreur: 'System.IO.FileNotFoundException: Impossible de trouver l'assembly '/ mnt/86f8c6c8-9099-4f32-be68-486a12918546/GoogleDrive/__ BACKLOG/RMK_API_LIB/rmkSuppliersDLLswrappers/scr/Hoval/isc.Eng.Hov'.' –

Répondre

4

la solution consistait à utiliser ILSPY pour examiner la DLL et rechercher des dépendances (cliquez avec le bouton droit de la souris sur chaque DLL et cliquez sur Ajouter des dépendances). Ensuite, j'ai copié toutes les dépendances dans le même dossier où se trouvait la DLL principale. Après cela, j'ai couru:

print [a for a in clr.ListAssemblies(False) 

et obtenir la liste des dépendances qui sont effectivement impliqués:

u'isc.Eng.Hov', u'Microsoft.VisualBasic', u'System.Windows.Forms', u'System.Drawing', u'Accessibility' 

et les a laissés dans le dossier. Après cela la partie du code:

sys.path.append(assemblyPath) 

clr.AddReference("isc.Eng.Hov") 

import isc.Eng.Hov as isk 
from isk import * 

a commencé à travailler.

Merci à tous, particulièrement @denfromufa pour l'aide!

+0

Donc, c'est que l'assemblage n'a pas réussi à charger mais il n'y avait aucune indication de ceci dans 'AddReference'? Pas le meilleur UX que je dirais et pourrait justifier un rapport de bogue ou quelque chose. –

+0

Désolé @ivan_pozdeev Je ne vous ai pas eu –

+1

Vous dites que la cause première était que l'assembly ne pouvait pas charger en raison de dépendances manquantes. Mais vous n'avez obtenu aucune exception ou à peu près n'importe quoi pour l'indiquer. Donc, Python.NET pourrait voir une amélioration ici. –