standards - sirven - referencias cruzadas en un libro
¿Cuándo se debe usar una referencia de proyecto opuesta a una referencia binaria? (6)
Mi compañía tiene una biblioteca de códigos común que consiste en muchos proyectos de biblioteca de clase junto con proyectos de prueba de apoyo. Cada proyecto de biblioteca de clases genera un solo binario, por ejemplo, Company.Common.Serialization.dll. Como poseemos los binarios compilados y probados, así como el código fuente, existe un debate sobre si nuestras aplicaciones consumidoras deben usar referencias binarias o de proyectos.
Algunos argumentos a favor de las referencias del proyecto:
- Las referencias de proyectos permitirían a los usuarios depurar y ver todo el código de solución sin la carga adicional de cargar proyectos / soluciones adicionales.
- Las referencias de proyectos ayudarían a mantenerse al día con los cambios de componentes comunes comprometidos con el sistema de control de origen, ya que los cambios serían fácilmente identificables sin la solución activa.
Algunos argumentos a favor de las referencias binarias:
- Las referencias binarias simplificarían las soluciones y acelerarían los tiempos de carga de la solución.
- Las referencias binarias permitirían a los desarrolladores enfocarse en un nuevo código en lugar de distraerse potencialmente por un código que ya está horneado y probado como estable.
- Las referencias binarias nos obligarían a alimentar apropiadamente nuestras cosas, ya que estaríamos utilizando la biblioteca común tal como se requeriría que hicieran los que están fuera de nuestra organización.
- Dado que una referencia binaria no se puede depurar (intercalar), uno se verá forzado a replicar y solucionar problemas extendiendo los proyectos de prueba existentes en lugar de probarlos y solucionarlos solo en el contexto de la aplicación consumidora.
- Las referencias binarias asegurarán que el desarrollo simultáneo en el proyecto de biblioteca de clase no tendrá ningún impacto en la aplicación consumidora, ya que se hará referencia a una versión estable del binario en lugar de a una versión de afluencia. Sería la decisión del líder del proyecto si incorporar o no una versión más nueva del componente si es necesario.
¿Cuál es su política / preferencia cuando se trata de usar referencias de proyecto o binarias?
Creo que si el proyecto no es parte de la solución, no deberías incluirlo allí ... pero esa es solo mi opinión
Lo separo por concepto en resumen
Creo que su pregunta es en realidad cuando los proyectos van juntos en la misma solución; la razón es que los proyectos en la misma solución deben tener referencias de proyecto entre sí, y los proyectos en diferentes soluciones deben tener referencias binarias entre sí.
Tiendo a pensar que las soluciones deben contener proyectos que se desarrollan estrechamente juntos. Como sus ensamblajes API y sus implementaciones de esas API.
La cercanía es relativa, sin embargo. Un diseñador para una aplicación, por definición, está estrechamente relacionado con la aplicación, sin embargo, no le gustaría tener el diseñador y la aplicación dentro de la misma solución (si es que son complejos). Probablemente desee desarrollar el diseñador contra una rama del programa que se fusiona a intervalos más espaciados que la integración diaria normal.
En mi opinión, el mayor problema con el uso de referencias de proyectos es que no proporciona a los consumidores una base común para su desarrollo. Asumo que las bibliotecas están cambiando. Si ese es el caso, compilarlos y asegurarse de que estén versionados le proporcionará un entorno fácilmente reproducible.
No hacer esto significará que su código se romperá misteriosamente cuando cambie el proyecto al que se hace referencia. Pero solo en algunas máquinas.
Me parece que has cubierto todos los puntos principales. Hemos tenido una discusión similar en el trabajo recientemente y todavía no estamos del todo decididos.
Sin embargo, una cosa que hemos investigado es hacer referencia a los archivos binarios, para obtener todas las ventajas que observa, pero tener los binarios construidos por un sistema de compilación común donde el código fuente está en una ubicación común, accesible desde todas las máquinas de desarrollo ( al menos si están sentados en la red en el trabajo), de modo que cualquier depuración puede de hecho sumergirse en el código de la biblioteca, si es necesario.
Sin embargo, en la misma nota, también hemos etiquetado muchas de las clases base con los atributos adecuados para hacer que el depurador omita por completo, porque cualquier depuración que realice en sus propias clases (en el nivel que está desarrollando) lo haría solo va a ser enormemente desproporcionado por el código de las bibliotecas base. De esta forma, cuando pulses la tecla de método abreviado Step To Step para depurar en una clase de biblioteca, volverás a la superficie en el siguiente fragmento de código en tu nivel actual, en lugar de tener que pasar por toneladas de código de biblioteca.
Básicamente, definitivamente voto (en términos de SO) tus comentarios sobre mantener el código de la biblioteca comprobada fuera del alcance de la vista del desarrollador normal.
Además, si cargo el archivo de la solución global, que contiene todos los proyectos y, básicamente, todo, ReSharper 4 parece tener algún tipo de problema coronario, ya que Visual Studio prácticamente se paraliza.
Tiendo a tratar bibliotecas comunes como esta como recursos de terceros. Esto permite que la biblioteca tenga sus propios procesos de compilación, pruebas de control de calidad, etc. Cuando QA (o quien sea) "bendice" un lanzamiento de la biblioteca, se copia a una ubicación central disponible para todos los desarrolladores. Depende de cada proyecto decidir qué versión de la biblioteca consumir copiando los binarios en una carpeta de proyecto y utilizando referencias binarias en los proyectos.
Una cosa que es importante es crear archivos de símbolos de depuración (pdb) con cada compilación de la biblioteca y ponerlos también a disposición. La otra opción es crear un almacén de símbolos local en su red y hacer que cada desarrollador agregue ese almacén de símbolos a su configuración VS. Esto le permitiría depurar a través del código y aún así tener los beneficios de utilizar referencias binarias.
En cuanto a los beneficios que menciona para referencias de proyectos, no estoy de acuerdo con su segundo punto. Para mí, es importante que los proyectos consumidores explícitamente conozcan qué versión de la biblioteca común están consumiendo y que den un paso deliberado para actualizar esa versión. Esta es la mejor manera de garantizar que no recoja accidentalmente cambios en la biblioteca que no se hayan completado o probado.
cuando no lo desee en su solución, o tenga la posibilidad de dividir su solución, envíe toda la salida de la biblioteca a un directorio bin común y haga referencia allí.
Lo he hecho para permitir a los desarrolladores abrir una solución ajustada que solo tenga el dominio, las pruebas y los proyectos web. Nuestros servicios para ganar, y cosas de Silverlight, y las bibliotecas de control web están en soluciones separadas que incluyen los proyectos que necesita al analizarlos, pero nant puede construirlo todo.