È una cattiva pratica registrare gli assembly nel GAC?

3

Ho spostato alcuni assembly nella Global Assembly Cache perché sono utilizzati da più applicazioni, ad esempio un'app VB.NET e un'app ASP.NET.

Ricordo che alcuni anni fa, quando ho iniziato il mio ruolo attuale, ho notato che lo sviluppatore precedente registrava DLL COM nella cartella System32. Ho chiesto informazioni su questo e Hans Passant ha risposto dicendo che era una pratica sbagliata perché System32 è per DLL del sistema operativo. È una cattiva pratica registrare gli assembly nel GAC per ragioni simili?

La mia comprensione è la seguente: se si accede a una DLL .NET, le mie 2 o più applicazioni vengono inserite nel GAC.

    
posta w0051977 27.01.2015 - 18:19
fonte

3 risposte

5

Suggerirei di stare lontano dal GAC il più possibile. Diverse versioni di assemblaggio non sempre funzionano bene e il debugging può essere un vero PIA.

Da un punto tecnico se due app usano un assembly è accettabile metterlo nel GAC.

Nell'uso del mondo reale, i pochi Kilobiti di spazio salvato non valgono le settimane / mesi di debug di un problema di dipendenza GAC. È molto meglio (nella pratica reale) mantenere un'app e le dipendenze il più isolate possibile.

    
risposta data 27.01.2015 - 20:20
fonte
3

Direi di sì, usare GAC è una "cattiva pratica" ... O meglio, non è una pratica raccomandata per la maggior parte delle situazioni. Caso e punto, la versione successiva di ASP.NET non utilizza nemmeno il GAC ( link ).

Per altri motivi, il GAC è una cattiva idea:

  • La distribuzione degli assembly nel GAC può essere difficile.
  • Gli assembly di versione in GAC possono essere difficili.
  • La configurazione delle autorizzazioni per gli assiemi può essere difficile.

E, se mai, la mia esperienza personale con il GAC mi ha portato ad evitarlo a tutti i costi ... :)

    
risposta data 27.01.2015 - 19:47
fonte
0

L'utilizzo di GAC non è di per sé negativo (in alcune situazioni potrebbe anche essere richiesto), ma dovresti sapere cosa stai facendo.

Tuttavia, alcuni suggerimenti rapidi;

  • Non eseguire la distribuzione su GAC se la macchina non è yours to command .
  • Non eseguire la distribuzione su GAC se non si utilizza il controllo delle versioni dell'assembly.
  • Non eseguire la distribuzione in GAC se puoi semplicemente utilizzare una cartella bin locale.
  • Non eseguire la distribuzione su GAC se si desidera utilizzare più versioni distinte in posizioni diverse sulla macchina (a meno che non si differenzino nella versione major.minor).

Detto questo;

Non vorrei distribuire al GAC per uno scenario ASP.NET . Basta usare la cartella bin nel percorso dell'applicazione web. Tieni presente che ASP.NET esamina la cartella bin locale prima di esaminare anche il GAC.

    
risposta data 27.01.2015 - 21:17
fonte

Leggi altre domande sui tag