2009-01-30 8 views
11

Wie können Sie alle verfügbaren .NET 2.0-Assemblys am besten auflisten?Liste aller verfügbaren .NET-Assemblies

Ein Beispiel für die benötigte Liste ist die, die MS Visual Studio zeigt, wenn Sie "Referenz hinzufügen ..." auf der Registerkarte .NET hinzufügen.

Ich habe gelesen Visual Studio verwendet eine eigene Verzeichniskonfiguration und der GAC ein anderes und .NET-Installation ein anderes. Irgendwelche Ideen, wie ich wissen kann, wo diese Verzeichnisse in einer tragbaren Computerart sind (ein anderer Computer hat vielleicht Fenster, die in Laufwerk D: installiert sind)?

Aus den aufgelisteten Informationen muss Assembly.Loadxxxx() es möglich sein.

Hinweis: Es sollte programmatisch durchgeführt werden und nicht mit gacutil zum Beispiel (es sei denn, es bietet eine C# API). Das Ziel von all dem ist es, einen benutzerdefinierten dynamischen Skript-Editor zu erstellen, damit Sie verstehen, dass Sie zu diesen Informationen gelangen müssen.

Antwort

-1

Die einzige Information, die ich früher über das gleiche Problem gefunden habe, ist this, aber ich kam nie um diese Informationen zu verwenden.

Es sieht ein bisschen beschwerlich aus, ein Verzeichnis zu durchsuchen, um alle .DLL-Dateien zu finden, aber vielleicht müssen Sie das tun.

9

Zuallererst gibt es einen wichtigen Unterschied zwischen Referenzbaugruppen und Baugruppen im GAC. Um Code zu kompilieren, benötigen Sie eine Referenzbaugruppe. Um Code auszuführen, benötigen Sie entweder eine Kopie der Assembly im selben Ordner wie Ihre EXE-Datei oder die Assembly im GAC.

Wenn Sie eine .NET-Anwendung installieren, kopiert das Installationsprogramm normalerweise die Assemblys, die es in der GAC verwendet. Diese Assemblies sind nicht verwendbar als Referenz-Assemblys, Sie können nicht herausfinden, in welchem ​​Ordner es gespeichert ist, so können Sie den Compiler nicht den richtigen Wert seiner/Reference Command Line Argument sagen. Nun, Sie können es herausfinden, aber Microsoft hat versucht, es mit einem Shell-Add-In so schwer wie möglich zu machen.

Etwas anderes passiert, wenn Sie eine .NET-Anwendung installieren, die es Ihnen ermöglicht, ihre Assemblys in Ihrem eigenen Programm zu verwenden. Wie das .NET Framework. Es wird zwei Kopien von jeder Versammlung machen. Einer geht in den GAC, der andere in einen "bekannten" Ort. Für das .NET-Framework sind diese bekannten Speicherorte c: \ windows \ microsoft.net \ und c: \ program files \ reference assemblies. Der letztere Ordner wurde von .NET 3.0 und höher verwendet.

Visual Studio-Dialogfeld Verweis hinzufügen verwendet einen Registrierungsschlüssel, der diese bekannten Speicherorte auflistet. Es gibt ein Paar, aber das wichtige ist HKLM\Software\Microsoft\.NETFramework\AssemblyFolders.

Lange Rede kurzer Sinn: Sie könnten diesen Registrierungsschlüssel verwenden, um die gleiche Liste zu erstellen, die das Dialogfeld Verweis hinzufügen erstellt. Aber es ist nicht 100% zuverlässig, Sie könnten Referenz-Baugruppen vermissen, die irgendwo anders kopiert wurden. Sie müssten die Registerkarte Durchsuchen in VS verwenden, um Verweise auf diese hinzuzufügen. Und durchsuchen Sie die gesamte Festplatte, um sie selbst zu finden.

+0

Ich habe versucht den letzten Punkt in Ihrer Antwort und hat nicht funktioniert. 'System.dll' ist beispielsweise in keinem der Pfade enthalten, die unter' HKLM \ Software \ Microsoft \ .NETFramework \ AssemblyFolders' gefunden werden – GETah