2010-09-15 19 views
6

Digamos que tengo dos proyectos A y B. A depende de B. Puedo especificar esto de dos maneras:Diferencia entre las dependencias del proyecto y DLL en .Net en el ensamblado compilado última

  • Incluir A y B en la misma solución y especifique B como una dependencia de proyecto para A. Esto aparece en el proyecto msbuild de A como un nodo "ProjectReference".
  • incluir una referencia al archivo DLL compilado de la B como la dependencia de A. Esto se muestra en el proyecto msbuild de A como un nodo de "referencia"

Mi pregunta es, una vez que he construir el conjunto de A, se hay una diferencia en el resultado final entre estos dos métodos.

Intenté crear un par de proyectos simples que modelen esta relación e intenté una comparación, pero las diferentes herramientas de comparación me dicen cosas diferentes. A la espera de escribir algo que compare estos archivos byte a byte, me preguntaba si ustedes sabían algo al respecto. Específicamente, ¿habrá alguna diferencia en el comportamiento del ensamblado construido si utilizo la referencia dll en lugar de una referencia de proyecto?

Respuesta

5

Si las fuentes del proyecto B no han cambiado entre dos versiones del proyecto A, no habrá diferencia en el comportamiento de la salida del proyecto A. Sin embargo, si las fuentes del proyecto B han cambiado, al hacer referencia a él como un proyecto del proyecto A, también se reconstruirá el proyecto B. Esta diferencia es lo que determina su elección de cómo hacer referencia el proyecto B del proyecto A:

  • si posee la fuente tanto el proyecto B y el proyecto A, y que está fuertemente acoplado, o si ambos están bajo activo el desarrollo y el proyecto B se someten a menudo a cambios bruscos en su interfaz pública, quiere hacer referencia al proyecto B como proyecto. Esto garantizaría que el proyecto A siempre use en su compilación la salida más actualizada del proyecto B.

  • si el proyecto B es una dependencia externa que usted no desarrolla, o no tiene las fuentes para , o si ya se ha enviado y no puede enviar la versión modificada con el proyecto A, desea hacer referencia al resultado del proyecto B precompuesto, para asegurarse de que está desarrollando y probando con la misma versión del proyecto B, que es la más Probablemente esté en las computadoras de sus usuarios.

+0

@Timwi - gracias por el establecimiento de la dirección recta dependencia :-) por alguna razón que lo escribí exactamente opuesta a la del ejemplo de la OP –

+3

también añadir a la respuesta, en caso de que el proyecto B dependía digamos C. dll, si B se especifica como una dependencia del proyecto de A, la compilación del proyecto A traerá automáticamente las dependencias del proyecto B (por ejemplo, C.dll). En cambio, si incluye una referencia a la DLL compilada de B, no tendrá C. dll agregado automáticamente a la bandeja de A, en su lugar tendrá que agregar manualmente todas las dependencias de B. –

3

Agregar como referencia del proyecto solo tiene la ventaja de que el ensamblaje "B" se construye automáticamente si es necesario.

Una vez que se construye el ensamblaje "A", no hay diferencia.

Cuestiones relacionadas