Sfruttando la possibilità di inserire alcuni assembly a run-time come plug-in, usando ad es. pattern come Abstract Factory, capita di non avere assembly referenziati direttamente nelle reference di progetto.
Nel caso di una solution con tanti progetti di cui una parte non referenziati, la copia e l'aggiornamento di questi assembly non viene più fatta da Visual Studio durante la build, ma dovrebbe essere fatta manualmente.
Un piccolo work-around a questa situazione, ovvero un piccolo trucchetto per far si che il nostro caro IDE continui ad aggiornarci automaticamente anche gli assembly non referenziati è sfruttare "Property di progetto".
Facendo tasto destro dal Solution Explorer sul progetto interessato ci si apre la maschera per l'editing delle informazioni legate al nostro assembly. All'interno, sulla sinistra, compaiono una serie di tab; selezionato Build Events possiamo dire a Visual Studio di compiere certe azioni (con macro e script) prima e dopo la build del nostro progetto (anche qui in base a eventi specifici, come successfull build o sempre).
A questo punto è semplicissimo. Per far si che il nostro assembly venga aggiornato basta aggiungere dei comandi nella sezione "Post-build event command line":
copy "$(TargetPath)" "$(SolutionDir)<progetto principale>\Bin"
copy "$(TargetDir)<nome assembly>.pdb" "$(SolutionDir)<progetto principale>\Bin"
Legenda:
$(TargetPath) = il prodotto del nostro progetto (l'assembly non referenziato) con path e nome file completo
$(TargetDir) = la root dir del progetto del nostro assembly non referenziato
$(SolutionDir) = la root dir della nostra solution
Questo semplicissimo script sfrutta le variabili macro che l'ambiente Visual Studio già ci mette a disposizione e nel nostro caso copia la DLL (prima riga) e anche le info di debug (seconda riga). Al contrario del codice di esempio o autocomposto ho aggiunto le virgolette (") in modo da gestire l'eventuale presenza di path con spazi o altri caratteri (come nel mio caso il path dei proj di VS è "Visual Studio 2005").
Facendo così evito di editare a manina il file di properties della solution, ho un'interfaccia un pò più semplice e soprattutto, dopo questo, faccio fare tutto il lavoro sporco a Visual Studio.