Ho un progetto di supporto che utilizzo in tutte le applicazioni che creo. Contiene alcuni metodi di estensione e un gruppo di classi helper generiche, controlli, ecc. Aggiorna / estro il progetto helper di volta in volta. Questi sono di solito progetti piccoli e non correlati, e io sono l'unica persona che lavora su tutti loro.
Ho provato due approcci per usarlo
- aggiungi i file .cs direttamente (Aggiungi come link) a ciascun progetto in cui li utilizzo
- compila come .dll e aggiungilo come riferimento
Vedo alcuni vantaggi e svantaggi di questi approcci.
Il primo:
- è più semplice, perché le classi di helper vengono compilate nel file exe, quindi spesso posso fornire molto facilmente un singolo file .exe che funzionerà perfettamente. Poiché aggiungo come collegamento, posso essere abbastanza sicuro che ogni volta che creo qualsiasi progetto che utilizza l'helper, i file helper saranno l'ultima versione.
- è ancora più semplice, perché posso separare i file, in modo che i miei metodi di estensione che funzionano bene 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ò essere eseguita su .NET 4.0
- Consente di eseguire il debug del codice, con tutti i vantaggi dei punti di interruzione ecc. ecc.
- non sembra essere una "best practice"
Il secondo:
- sembra essere l'approccio giusto, ma:
- mi richiede di consegnare un file .dll separato, che per qualche motivo è molto più difficile per gli utenti (tendono a condividere i miei programmi senza la .dll, che poi si blocca all'avvio)
- come viene compilato in una singola .dll, richiede la versione più alta di .NET - molti dei miei utenti non hanno .NET 4.5 e solo alcuni elementi della mia classe helper richiedono questo, il che significa che posso essere costringendo alcune persone ad aggiornare i loro sistemi senza motivo
- Devo anche assicurarmi che ogni volta che aggiorno qualcuno dei miei programmi, recapito anche il file .dll - anche se non so se è stato modificato dall'ultima versione, o no (avrebbe potuto essere , ma potrebbe anche essere la stessa versione). Non riesco a vedere un modo semplice per determinarlo, senza tenere traccia della versione di assemblaggio, che è un lavoro aggiuntivo. Per ora, quando aggiorno i miei programmi, fornisco solo exe aggiornati, e mi piace tenerlo piccolo e basso profilo.
Quindi, qual è il vantaggio effettivo per l'utilizzo del file .dll qui? Tieni presente che io sono l'unico codice di modifica di tutte le applicazioni e i file di supporto.
Inoltre, per chiarire - le app di solito sono molto piccole, mentre il codice contenuto nelle classi helper è completamente generico per tutti (alcuni semplici confronti tra stringhe, percorsi o operazioni XML ecc.)
In realtà, qualcuno mi ha fatto capire solo ora che c'è una terza opzione. Dato che ho il codice di aiuto in un progetto separte, posso aggiungere questo progetto alle soluzioni di ciascuna delle mie applicazioni separate, che funziona in modo simile a "Aggiungi come collegamento" per singoli file, tranne che aggiungo solo un singolo progetto ... Ma come notato da Doc Brown, questo significa essenzialmente che .dll dovrà essere aggiunto al progetto comunque ...
Ancora un'altra cosa che è un po 'a favore di non usare i file dll è la possibilità di eseguire il debug attraverso la classe helper attivamente ...