2009-07-31 10 views

Répondre

2

2 solutions me viennent à l'esprit, même si je pense qu'il est beaucoup plus facile (que j'ai oublié ou don 't know :)):
1. Chargez vos assemblys à l'aide de AppDomain supplémentaires que vous pouvez créer. Le déchargement entier AddDomain déchargera également les assemblys chargés (mais seulement ceux qui ont été chargés en utilisant ce AppDomain).
2. Utilisez une API, par exemple CCI qui vous permet de regarder à l'intérieur d'une DLL gérée sans la charger à l'aide d'un mécanisme de réflexion.

+0

thx, se penchera sur cci, la 1ère option ne fonctionne pas en raison de dépendances – Kumar

+0

regardant et aller nulle part ... le seul échantillon que j'ai trouvé est http://www.codeproject.com/KB/recipes/Not_Used_Analysis.aspx mais il est vieux et ne compile pas – Kumar

+0

Je l'ai fait fonctionner avec Cecil mais je voudrais utiliser CCI car il est utilisé en interne par MS et est susceptible d'être plus courant – Kumar

2

Kumar,

Vous pouvez décharger .Net DLL, mais vous devez utiliser l'objet AppDomain pour les charger en premier lieu, puis de nouveau pour décharger.

Jetez un oeil: http://msdn.microsoft.com/en-us/library/system.appdomain(VS.80).aspx

Si vous voulez toujours éviter ce type de processus, je suppose que vous pouvez analyser le DLL vous-même, mais ce serait beaucoup plus de travail que d'utiliser le AppDomain je pense.

-p

+0

Le problème résout les dépendances de la dll dans le nouveau bac à sable AppDomain en quelque sorte, sandBox.AssemblyResolve + = new ResolveEventHandler (Reh génère une erreur indiquant que l'assemblage actuel n'est pas trouvé? des indices? – Kumar

0

Je suis sûr que quelqu'un va me corriger si je me trompe, mais n'est pas le manifeste juste une autre ressource dans la DLL? Si oui, vous pouvez le lire comme n'importe quelle autre ressource.

Voici un outil open source qui vous permet d'explorer une DLL de ressources:

http://www.wilsonc.demon.co.uk/d10resourceeditor.htm 

Et bien sûr, je peux voir avec elle se manifeste embarqués. Donc, chargez la DLL en utilisant LoadLibrary() et allez chercher les ressources.

+0

LoadLibrary() n'a pas fonctionné avec les DLL gérés de ce que j'ai l'air d'avoir lu plus tôt – Kumar

+0

Que voulez-vous dire par "ne fonctionne pas"? –

5

trouvé cet System.Reflection.Assembly.ReflectionOnlyLoadFrom (chemin) le tour est joué

Questions connexes