2009-07-31 5 views

Antwort

2

2 Lösungen kommen mir in den Sinn erwarten, obwohl ich denke, es ist einfacher Art und Weise (die ich vergessen haben oder don Weiß nicht :)):
1. Laden Sie Ihre Baugruppen mit einigen zusätzlichen AppDomain, die Sie erstellen können. Entladen ganze AddDomain entladen auch geladene Baugruppen (aber nur diejenigen, die mit dieser AppDomain geladen wurden).
2. Verwenden Sie eine API, z. B. CCI, mit der Sie in verwaltete DLLs hineinschauen können, ohne sie mithilfe eines Reflektionsmechanismus zu laden.

+0

thx suchen, werden in cci suchen, die erste Option funktioniert nicht aufgrund von Abhängigkeiten – Kumar

+0

es zu betrachten und nirgendwo ... die einzige Probe werde ich gefunden ist http://www.codeproject.com/KB/recipes/Not_Used_Analysis.aspx aber es ist alt und kompiliert nicht – Kumar

+0

ich habe es mit Cecil arbeiten, aber möchte CCI verwenden, da es intern von MS verwendet wird und wahrscheinlich sein wird mehr aktuelle – Kumar

2

Kumar, nicht entladen

Sie .Net entladen CAN DLLs, aber Sie müssen das AppDomain-Objekt verwenden, um sie an erster Stelle zu laden und dann wieder zu entladen.

Werfen Sie einen Blick: http://msdn.microsoft.com/en-us/library/system.appdomain(VS.80).aspx

Wenn Sie immer noch diese Art von Prozess vermeiden wollen, nehme ich an Sie die DLL selbst, aber ich denke, das wäre viel mehr Arbeit als mit der AppDomain analysieren konnte.

-p

+0

Das Problem ist die Lösung der Abhängigkeiten der DLL in der neuen AppDomain Sandbox irgendwie sandBox.AssemblyResolve + = new ResolveEventHandler (reh) erzeugt einen Fehler, der besagt, dass die aktuelle Assembly nicht gefunden wurde ??? irgendwelche Hinweise? – Kumar

0

Ich bin sicher, jemand wird mich korrigieren, wenn ich falsch liege, aber ist das Manifest nicht nur eine andere Ressource in der DLL? Wenn ja, können Sie es wie jede andere Ressource lesen.

Hier ist ein Open-Source-Tool, das Sie eine DLLs Ressource erkunden kann:

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

Und sicher genug, kann ich eingebettet Manifeste mit ihm sehen.

Also, laden Sie die DLL mit LoadLibrary() und gehen Ressource suchen.

+0

LoadLibrary() hat nicht mit verwalteten DLLs von dem, was ich scheinen, früher gelesen – Kumar

+0

Was meinst du mit "funktioniert nicht"? –

5

fanden diese System.Reflection.Assembly.ReflectionOnlyLoadFrom (Pfad) funktioniert der Trick