Perché alcuni assembly .Net non sono disponibili tramite il metodo GetAssemblies () di AppDomain?

StackOverflow https://stackoverflow.com/questions/1402718

Domanda

Ho un po 'di codice che scorre attraverso i tipi attualmente caricati in un AppDomain che gira in un'applicazione ASP.NET. Ecco come ottengo le assemblee:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

Al primo avvio dell'applicazione, non vi sono problemi e sono presenti tutti i tipi che mi aspetto. Ma quando aggiorno Web.config o uccido il processo w3p.exe (o il processo viene riciclato per qualsiasi motivo) sono disponibili solo alcuni dei tipi che mi aspetto. Quando passo attraverso un debugger noto che alcuni assembly dal percorso di ricerca privato (la directory bin della mia applicazione) non sono stati caricati. Supponevo che tutti gli assembly fossero caricati all'avvio dell'applicazione e riavviati se fossero immediatamente necessari. Ma nel caso del riavvio questo non sembra accadere a meno che quei file di assembly non siano stati aggiornati.

Ciò di cui ho bisogno è di raccogliere informazioni sul tipo all'avvio per un utilizzo successivo. Ma dal momento che durante un riavvio i tipi non sono disponibili, si crea caos in seguito quando è necessario utilizzare le informazioni sul tipo. Quindi, tenuto conto di ciò, come posso risolvere o ovviare a questa carenza?

È stato utile?

Soluzione

Come parte della startup, puoi esplicitamente caricare le assemblee che ti interessano?

Dovresti sapere in anticipo quali assemblaggi ti occorrono.

Scansionare il filesystem per scoprire quali assembly sono stati spediti insieme alla tua app può essere un'idea utile, ma non aiuterà per gli assembly caricati da GAC ??...

Altri suggerimenti

Gli assembly vengono caricati su richiesta, quindi è possibile che tu non abbia ancora utilizzato alcun tipo contenuto in questi assembly.

Puoi usare

AssemblyName[] assemblies = Assembly.GetCallingAssembly().GetReferencedAssemblies();

In questo modo, si ottengono tutti gli assembly a cui fa riferimento l'assembly da cui si chiama questo metodo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top