2010-09-15 14 views
6

Diciamo che ho due progetti di A e B. A dipende da B. posso specificare questo in due modi:Differenza tra progetto e dll dipendenze nel .Net in assembly compilato finale

  • Includere A e B nella stessa soluzione e specificare B come dipendenza del progetto per A. Questo si presenta nel progetto msbuild di A come nodo "ProjectReference".
  • includere un riferimento alla DLL compilata del B come dipendenza per A. Questo si presenta nel progetto msbuild di A come nodo "di riferimento"

La mia domanda è, una volta che ho costruire l'assemblaggio per A, è c'è una differenza nell'output finale tra questi due metodi.

Ho provato a creare un paio di semplici progetti che modellano questa relazione e ho provato un confronto, ma diversi strumenti di confronto mi dicono cose diverse. In attesa di scrivere qualcosa che confronta questi file byte per byte, mi stavo chiedendo se voi gente sapeste qualcosa su questo. Specificamente, ci sarà qualche differenza nel comportamento dell'assemblaggio costruito se utilizzo il riferimento a dll invece di un riferimento di progetto.

risposta

5

Se le origini del progetto B non sono cambiate tra due versioni del progetto A, non vi sarà alcuna differenza nel comportamento dell'uscita del progetto A. Tuttavia, se le origini del progetto B sono cambiate, fare riferimento come progetto dal progetto A farà sì che anche il progetto B venga ricostruito. Questa differenza è ciò che determina la scelta di come riferimento al progetto B dal progetto A:

  • se si possiede la fonte sia di progetto B e del progetto A, e sono strettamente accoppiati, o se entrambi sono in attivo lo sviluppo e il progetto B sono soggetti a frequenti cambiamenti dell'interfaccia pubblica, si vuole fare riferimento al progetto B come progetto. Ciò assicurerebbe che il progetto A utilizzi sempre nella sua creazione l'output più aggiornato del progetto B.

  • se il progetto B è una dipendenza esterna che non si sviluppa da solo, oppure non si dispone delle fonti per , o se è già stato spedito e non è possibile spedire la versione modificata con il progetto A, si vuole fare riferimento all'output del progetto B pre-costruito, per assicurarsi che si stia sviluppando e testando con la stessa versione del progetto B, cioè la maggior parte probabilmente sui computer degli utenti.

+0

@Timwi - grazie per l'impostazione dritto la direzione di dipendenza :-) per qualche motivo ho scritto esattamente opposta a esempio del PO –

+3

anche per aggiungere alla risposta, nel caso in cui il progetto B dipendeva diciamo C. dll, se B è specificato come dipendenza del progetto di A, la compilazione del progetto A porterà automaticamente le dipendenze del progetto B (ad esempio C.dll). Invece se includi un riferimento alla dll compilata da B, non avrai C automaticamente aggiunto al bin di A, dovrai invece aggiungere manualmente tutte le dipendenze di B. –

3

L'aggiunta come riferimento di progetto ha il vantaggio che l'assemblaggio "B" viene automaticamente costruito, se necessario.

Una volta creato l'assemblaggio "A", non c'è differenza.

Problemi correlati