Ho un progetto di aiuto che utilizzo in tutte le applicazioni che creo. Contiene alcuni metodi di estensione e un gruppo di classi helper generiche, controlli ecc. Di tanto in tanto aggiorno / estendo il progetto helper. Questi di solito sono progetti piccoli e non correlati, e io sono l'unica persona che lavora su tutti loro.
Ho provato due approcci per usarlo
- aggiungere i file .cs direttamente (Aggiungi come collegamento) a ciascun progetto in cui li utilizzo
- compilarlo come .dll e aggiungerlo come riferimento
Vedo alcuni vantaggi e svantaggi di questi approcci.
Il primo:
- è più semplice, perché le classi helper vengono compilate nel file exe, quindi spesso posso facilmente fornire un solo file .exe che funzionerà perfettamente. Poiché aggiungo come collegamento, posso essere abbastanza sicuro che ogni volta che creo un progetto che utilizza l'helper, i file dell'helper saranno la versione più recente.
- è ancora più semplice, perché posso separare i file, in modo che i miei metodi di estensione che funzionano correttamente su .NET 4.0 possano essere referenziati separatamente da quelli che richiedono .NET 4.5, il che significa che l'app nel suo complesso può funzionare su .NET 4.0
- Permette il debug attraverso il codice, con tutti i vantaggi di breakpoint ecc. Ecc.
- non sembra essere la "migliore pratica"
Il secondo:
- sembra essere l'approccio giusto, ma:
- mi richiede di consegnare un file DLL separato, che per qualche ragione è molto più difficile per gli utenti (tendono a condividere i miei programmi senza il DLL, che quindi si arresta in modo anomalo all'avvio)
- poiché viene compilato in una singola DLL, richiederà la versione più alta di .NET - molti dei miei utenti non hanno .NET 4.5 e solo alcuni elementi della mia classe di supporto lo richiedono, il che significa che posso forzare alcune persone per aggiornare i loro sistemi senza motivo
- Devo anche assicurarmi che ogni volta che aggiorno uno dei miei programmi, consegno anche il file .dll, anche se non so se è stato modificato dall'ultima versione, oppure no (avrebbe potuto essere, ma poteva potrebbe anche essere la stessa versione). Non riesco a vedere un modo semplice per determinarlo, senza tenere traccia della versione dell'assembly, che è un lavoro aggiuntivo. Per ora, quando aggiorno i miei programmi, consegno solo exe aggiornato e mi piace mantenerlo piccolo e di basso profilo.
Quindi, qual è il vantaggio effettivo dell'utilizzo del file DLL qui? Tieni presente che sono l'unica persona che modifica il codice di tutte le applicazioni e i file di supporto.
Inoltre, per chiarire: le app sono in genere molto piccole, mentre il codice contenuto nelle classi di supporto è completamente generico per tutte (alcune semplici comparazioni di stringhe, percorsi o operazioni XML, ecc.)
In realtà, qualcuno mi ha fatto capire proprio ora che c'è una terza opzione. Dato che ho il codice helper in un progetto separato, posso aggiungere questo progetto alle soluzioni di ciascuna delle mie applicazioni separate - che funziona in un modo come "Aggiungi come collegamento" per singoli file, tranne che per aggiungere solo un singolo progetto ... Ma come notato da Doc Brown, ciò significa essenzialmente che .dll dovrà comunque essere aggiunto al progetto ...
Ancora un'altra cosa che è in qualche modo a favore del non usare i file DLL è la possibilità di eseguire il debug attraverso la classe helper attivamente ...