2008-12-16 6 views
0

Je fais un système addin où l'application principale charge les assemblages Addin1.dll et Addin2.dll à l'exécution dans le nouveau AppDomain.Comment charger uniquement l'assembly signé dans un nouvel AppDomain?

Toutefois, dans le cas où Addin1.dll est signé (nom fort) avec ma clé et Addin2.dll ne l'est pas, je veux être en mesure de charger uniquement Addin1.dll et rejeter Addin2.dll.

Je soupçonne que cela doit être fait en définissant certains paramètres dans AppDomainSetup?

Répondre

2

Examinez la méthode Assembly.Load qui prend un paramètre Evidence. Vous pouvez trouver un exemple de création d'une preuve à partir de votre clé publique here.

0

Vous pouvez implémenter un DomainManager et baser votre décision de charge/bloc sur ce que vous voulez. Je répondu à une question quelque peu liée here.

0

Vous pouvez utiliser Load method of AppDomain class pour charger un nouveau ensemble dans appdomain, à condition politique de l'éditeur de l'Assemblée est satisfaite par le client ou l'environnement de l'utilisateur final.

L'assembly nommé fort suit également toutes les règles définies par l'éditeur de l'assembly et le CLR. L'utilisateur de l'assembly doit donc satisfaire l'aspect de sécurité de l'assembly en cours de chargement dans le domaine d'application.

Le CLR charge l'assembly global référencé à partir du GAC à l'aide des propriétés de nom fort. Si l'assembly référencé est disponible dans le GAC, CLR renvoie son sous-répertoire contenant et le fichier contenant le manifeste est chargé. La recherche de l'assembly de cette façon assure à l'appelant que l'assembly chargé à l'exécution provient du même éditeur qui a construit l'assembly sur lequel le code a été compilé. Maintenant, comparaison du jeton de clé publique dans la table assemblyRef de l'assembly de référence et du jeton de clé publique dans la table AssemblyDef de l'assembly référencé. Si l'assembly référencé n'est pas dans le GAC, le CLR regarde dans le répertoire de base de l'application puis dans les chemins privés identifiés dans le fichier de configuration de l'application; Si l'application contenant l'assembly est installée à l'aide du MSI, CLR appelle MSI pour charger l'assembly requis. Si l'assembly n'est trouvé dans aucun de ces emplacements, une exception est levée et, finalement, la liaison de l'assemblage échoue.

Questions connexes