2010-12-31 1 views
0

J'ai un problème très étrange ici. Il semble que si j'instancie une classe dans un assemblage, j'obtiens une erreur d'assemblage non trouvée.Impossible de faire Assembly.Load (String) avec un assembly référencé à moins que j'instancie une classe au sein de cet assembly en premier. Comment résoudre?

Par exemple:

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo); 
Object mq = Activator.CreateInstance(mqType); 

émet une exception FileNotFound sur Assembly.Load

Ce:

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

new someClassInAssembly(); 

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo); 
Object mq = Activator.CreateInstance(mqType); 

fonctionne très bien. Oui, même s'il est instancié après Assembly.Load, il est donc clairement un problème lors de la compilation. Comment est-ce que je m'assure explicitement que l'assembly est chargé et trouvable pendant l'exécution, est-ce qu'il y a un arrangement de compilation quelque part, que dois-je faire?

Répondre

0

Assurez-vous que vous chargez l'assemblage que vous pensez que vous chargez, en fournissant le chemin:

AssemblyName an = AssemblyName.GetAssemblyName(filePath); 
Assembly.Load(an); 
0

Honnêtement, si son juste une référence unique ou une poignée, il suffit d'ajouter une référence explicite quelque part, il vous épargnera beaucoup d'efforts.

//Use a static constructor somewhere appropriate. 
static someClass(){ 
    new AssemblyYouCareAbout.Object(); 
} 

Les alternatives sont le long des lignes de transport de dll manuellement dans le bac de votre processus en cours d'exécution ou d'ajouter les dll au gac. Je préfère utiliser le constructeur statique pas si élégant et passer à autre chose.

Questions connexes