2010-06-23 2 views
2

J'ai un assembly avec un nom fort, installé dans un dossier spécifique (et non le GAC).Charger l'assembly de nom fort d'un chemin spécifique?

Le nom comme indiqué dans le réflecteur est:

"Foo.Bar.TreeFrog, Version=1.2.1.0, Culture=neutral, PublicKeyToken=ac88c4a8b22089b4" 

et le chemin où il est installé est

"c:\\QueueBall" 

Puis-je utiliser Assembly.Load ou Assembly.LoadFrom pour le charger, et si oui, comment? Puis-je m'assurer que la dénomination forte est respectée, c'est-à-dire que la DLL que je charge est vraiment celle que j'attends et non une imposture avec le même nom?

+0

Tss, tss. Créer vos propres dossiers directement à partir de la racine du lecteur n'est pas une bonne idée. –

+0

@Joel - pas quelque chose que je peux contrôler, hélas. Ce n'est pas ma DLL et pas de mon installateur. – Eric

Répondre

7

Vous pouvez utiliser LoadFrom:

var assembly = Assembly.LoadFrom(@"c:\QueueBall\Foo.Bar.TreeFrog.dll"); 

Notez que cela chargera également des ensembles référencés dans le domaine d'application en cours d'exécution de ce code. Si vous ne voulez pas ce comportement, vous pouvez utiliser la méthode LoadFile.


MISE À JOUR:

Vous pouvez vérifier l'identité de montage avant de le charger pour vous assurer qu'il n'a pas été falsifié:

AssemblyName an = AssemblyName.GetAssemblyName(@"c:\QueueBall\Foo.Bar.TreeFrog.dll"); 
byte[] key = an.GetPublicKey(); 
Version version = an.Version; 
+0

Merci. Est-il possible de vérifier également que le nom fort est correct, c'est-à-dire que quelqu'un n'a pas échangé dans sa propre DLL avec le même nom de fichier mais la mauvaise signature? – Eric

+0

@Eric, voir ma mise à jour. –

Questions connexes