2015-05-22 6 views
5

Ich habe ein Programm von Drittanbietern auf meinem Computer installiert. öffnete ich eine der DLL herauf, die mit diesem Programm in ildasm.exe kommt und inspiziert das Manifest:Wie finde ich welche mscorlib.dll ein Programm verwendet?

.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)    // .z\V.4.. 
    .ver 2:0:0:0 
} 

So verwendet das Programm entweder .net 2.0, 3.0 oder 3.5.

Ich suchte nach mscorlib.dll auf meinem Computer und fand 61 Dateien.

Wie finde ich welche dieser DLLs das Programm tatsächlich verwendet?

ich auch feststellen, dass ein paar von diesen sind in Verzeichnissen mit dem Namen: C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETPortable \ v4.0 \ Profile \ ProfileXXX \ mscorlib.dll, wo XXX ist eine 1-3-stellige Nummer.

Was geht hier vor? Ich könnte verstehen, dass jede .net-Version (2.0, 3.0, 3.5 ...) eine andere Datei hätte, die aber nicht zu 61 Dateien addieren sollte. Was ist der Unterschied zwischen jedem dieser Profile?

Ist das, was die. NET-Lösung des DLL-Hölle-Problems aussieht? Eine ganze Reihe von Versionen der gleichen Datei + öffentliche Schlüssel, um die .dll sicher zu identifizieren.

Wer löscht die DLLs, die nicht mehr verwendet werden? Es scheint, dass möglicherweise jedes Programm seine eigene Version von .net hat. Muss die Diskette irgendwann voll sein?

+1

Haben Sie bereits versucht [Fusion Log Viewer] (http://msdn.microsoft.com/en-us/library/e74a18c4%28VS.80%29.aspx)? Ich habe nicht angeschaut, ob dies verwendet werden kann, um mscorlib.dll zu überprüfen. http://StackOverflow.com/a/3952202/255562 –

+1

Sieht aus wie ein Duplikat, obwohl diese Antworten mehrere Jahre alt sind und veraltet sein können. http://stackoverflow.com/questions/227886/how-do-i-de-termine-the-dependencies-of-a-net-application – Almo

+0

Danke Ashish! Gemäß diesem Tool verwendet das Programm C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll. Ein anderer Name als mscorlib.dll, das ein bisschen seltsam ist, aber ok. Auch sagt es, dass es die Versammlung gefunden hat, indem es in GAC geschaut hat. – Andy

Antwort

7

Sie haben gerade eine einfache Tatsache entdeckt, .NET ist sehr beliebt und nach 13 Jahren gibt es viele Versionen davon. Die meisten Programmierer kennen Version 1.0, 1.1, 2.0 und 4.0 für die Desktop-Version. Und es wird immer von NGEN vorjited, also multipliziert mit 2. Die meisten wissen nicht, dass mscorlib.dll nicht verwalteten Code enthält, so dass es zwei verschiedene Versionen gibt, eine für 32-Bit und eine für 64-Bit-Code, multipliziert mit 2 wieder.

Das ist nur für den Desktop. Dann haben Sie die Versionen, die auf verschiedene Laufzeitumgebungen abzielen. Es gibt Silverlight, 5 verschiedene Versionen. Windows Phone, 4 Versionen. Windows Store, 2 Versionen. Und XBox. Sie sind wichtig, weil Sie Programme erstellen können, die auf diesen Zielen ausgeführt werden.

Dann gibt es Portable Class Libraries, die es Ihnen ermöglichen, die Reihe von Zielen auszuwählen, die Sie unterstützen möchten. Jede Permutation der Auswahl hat ihre eigene Referenz-Assembly, so dass Sie nicht versehentlich einen Typ verwenden können, der nicht auf einem der Ziele verfügbar ist.

Also die wirkliche Überraschung hier ist, dass Sie so einige von ihnen gefunden haben.

Denken Sie daran, dass die große Mehrheit, die Sie gefunden haben, nur Referenz-Baugruppen sind. Sie enthalten nur Metadaten, keinen Code, der im Verzeichnis c: \ Programme (x86) \ Reference Assemblies vorhanden ist. Sie verwenden sie nur, wenn Sie Ihr Programm erstellen. Zur Laufzeit wird der "echte" verwendet, er unterscheidet sich sehr von dem, mit dem Sie gebaut haben. Es ist die Last von Microsoft, sicherzustellen, dass sie zusammenpassen, und Sie werden kein Problem haben, sie sind sehr gut darin.

Es gibt sonst nichts Besonderes an dem, das Sie aufgelistet haben. Es fragt nach der v2.0-Version, die in .NET Framework Version 2.0 bis 3.5 verwendet wird. Auch wenn Sie keine dieser Versionen auf Ihrem Desktop installiert haben, können Sie die Version immer noch ausführen, wenn Sie 4.0, 4.5 oder 4.6 haben. Die Desktop-CLR übersetzt automatisch Anforderungen für 2.0.0.0 in die Version 4.0.0.0, sie ist sehr kompatibel.

Verwandte Themen