2015-05-22 13 views
5

Ho installato un programma di terze parti sul mio computer. Ho aperto una delle DLL di che viene fornito con questo programma in Ildasm.exe e ispezionato il manifesto:Come posso trovare quale mscorlib.dll sta utilizzando un programma?

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

Così il programma utilizza sia .net 2.0, 3.0 o 3.5.

Ho cercato mscorlib.dll sul mio computer e ho trovato 61 file.

Come individuare quale di questi file .dll sta effettivamente utilizzando?

Ho anche notato che un gruppo di questi sono in directory denominata: C: \ Program Files (x86) \ Riferimento Assemblies \ Microsoft \ Framework.NETPortable \ v4.0 \ Profilo \ ProfileXXX \ mscorlib.dll, dove XXX è un numero di 1-3 cifre.

Cosa sta succedendo qui? Potrei capire che ogni versione .net (2.0, 3.0, 3.5 ...) avrebbe un file diverso ma non dovrebbe aggiungere fino a 61 file. Qual è la differenza tra ciascuno di questi profili?

È questo l'aspetto della soluzione .net del problema di inferno .dll? Un sacco di versioni dello stesso file + chiavi pubbliche per identificare in modo sicuro il file .dll.

Chi cancella i file .dll che non vengono più utilizzati? Sembra che potenzialmente ogni programma abbia la sua versione di .net. Deve riempire il disco alla fine?

+1

Hai già provato [Fusion Log viewer] (http://msdn.microsoft.com/en-us/library/e74a18c4%28VS.80%29.aspx)? Non ho guardato Se questo può essere usato per controllare mscorlib.dll però. http://stackoverflow.com/a/3952202/255562 –

+1

Sembra un duplicato, anche se queste risposte hanno diversi anni e potrebbero non essere aggiornate. http://stackoverflow.com/questions/227886/how-do-i-determine-the-dependencies-of-a-net-application – Almo

+0

Grazie Ashish! Secondo questo strumento il programma utilizza C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll. Un nome diverso da mscorlib.dll che è un po 'strano ma ok. Inoltre dice che ha trovato l'assemblea guardando in GAC. – Andy

risposta

7

Hai appena scoperto un fatto semplice, .NET è stato molto popolare e dopo 13 anni ci sono un sacco di versioni di esso. La maggior parte dei programmatori conosce la versione 1.0, 1.1, 2.0 e 4.0 per la versione desktop. Ed è sempre preimpostato da NGEN quindi moltiplicato per 2. La maggior parte non sa che mscorlib.dll contiene codice non gestito quindi ci sono due versioni distinte di esso, uno per 32 bit e uno per codice a 64 bit, moltiplicato per 2 di nuovo.

Questo è solo per il desktop. Quindi hai le versioni che hanno come target diversi ambienti di runtime. C'è Silverlight, 5 versioni distinte. Windows Phone, 4 versioni. Windows Store, 2 versioni. E XBox. Hanno importanza perché puoi creare programmi che funzionano su questi obiettivi.

Poi ci sono le librerie di classi portatili, che consentono di selezionare il set di obiettivi che si desidera supportare. Ogni permutazione delle scelte ha il suo distinto gruppo di riferimento , quindi non è possibile utilizzare accidentalmente un tipo che non sarà disponibile su uno dei bersagli.

Quindi la vera sorpresa qui è che hai trovato così pochi di loro.

Tieni presente che la grande maggioranza che hai trovato sono solo assiemi di riferimento. Contengono solo metadati, nessun codice, presenti nella directory c: \ Programmi (x86) \ Reference Assembly. Li usi solo quando costruisci il tuo programma. In fase di esecuzione viene utilizzato il "vero", molto diverso da quello con cui è stato creato. È compito di Microsoft assicurarsi che corrispondano e non si verificherà alcun problema, sono molto bravi a farlo.

Non c'è niente di speciale in quello che hai elencato. Richiede la versione v2.0, quella utilizzata in .NET Framework dalla versione 2.0 alla 3.5. Anche se non hai una di quelle versioni installate sul tuo desktop, puoi ancora eseguirla se hai 4.0, 4.5 o 4.6. Il CLR del desktop traduce automaticamente le richieste per 2.0.0.0 nella versione 4.0.0.0, è molto compatibile.

Problemi correlati