5

Abbiamo sviluppato una libreria in C# e ora desidero creare un modello di progetto per facilitare l'uso corretto della libreria.Qual è il modo migliore per includere riferimenti ai miei propri assembly in un modello di progetto?

Desidero che i nuovi progetti includano un riferimento all'assembly della libreria, ma preferiremo non dover distribuire l'assembly al GAC o dipendere dall'assieme che risiede in una posizione specifica.

Quello che sto pensando è includere il file .dll nel file di progetto .zip. Ciò significa che finirà da qualche parte all'interno della cartella del progetto di nuovi progetti. Forse in una cartella chiamata Lib. Quindi il suggerimento di riferimento nel file di progetto può puntare a quella cartella. È una buona idea? Quali problemi potrei affrontare lungo la strada?

C'è forse qualche meccanismo per includere tali librerie di terze parti in modelli di progetto di cui non sono a conoscenza? Come hai affrontato questo? Sicuramente non sono il primo

+0

La risposta dipende in qualche modo da come si pianifica la distribuzione dei modelli. Stai usando VSIX? Stai usando MSI (Windows Installer) o altra tecnologia di implementazione generica? Stavi pensando di distribuire semplicemente il file zip e fornire le istruzioni per l'installazione manuale? –

risposta

3

Ho dovuto affrontare questo problema in passato. In un caso, si trattava di una libreria di logging che è stata installata nel GAC, il che significava che l'elemento Reference aveva semplicemente bisogno del nome dell'assembly. In un altro caso, abbiamo installato la libreria sul file system, creato una chiave di registro che conteneva la posizione (nel caso in cui l'utente si svegli e cambiato la posizione di installazione su di noi) e utilizzato uno project template wizard per cercare la chiave di registro e compilare una sostituzione elemento per avere la posizione corretta nel HintPath del riferimento. (Nota: l'approccio della procedura guidata modello richiede l'installazione dell'assembly della procedura guidata in GAC, che sembra si stia tentando di evitare ...)

Se non si desidera installare la libreria in GAC o una posizione specifica, l'approccio di includere l'assembly nel progetto è praticamente l'unica opzione rimanente. Sul lato positivo, l'implementazione del modello di progetto è abbastanza semplice e non è necessario eliminare il GAC, i wizard personalizzati, ecc. Sul lato negativo, se si crea una nuova revisione della libreria, gli utenti avranno bisogno per aggiornare la copia di ogni progetto della libreria.

+0

Quali sono le implicazioni dell'installazione sul GAC? quali sono le ragioni per evitarlo? –

+1

L'implicazione principale è che la copia dell'assembly installato nel GAC "vince". Vale a dire, potresti avere una copia aggiornata nella cartella dell'app, ma finché il nome sicuro corrisponde, il runtime caricherà preferibilmente la copia dal GAC. Un esempio approssimativamente analogo sarebbe come se il percorso dell'assembly GAC fosse la prima voce della variabile PATH e si fosse emessa una chiamata LoadLibrary. Ciò può comportare un comportamento strano quando si tenta di aggiornare i file binari e il comportamento misteriosamente non cambia. –

+1

Inoltre, sebbene questo non sia direttamente un problema di GAC, l'uso di nomi sicuri indica che l'assembly richiede ora un assembly che corrisponda al nome sicuro con cui è stato compilato; dovrai ricompilare o registrare un criterio del publisher che reindirizzi i binding a una versione più recente. –