2010-10-19 13 views
32

Estamos usando TFS y VS 2010.ayuda con TFS y archivos DLL a los que se hace referencia

He estado trabajando en un proyecto que utiliza TFS como control de origen. Tengo bastantes dlls que he descargado (como log4net) y hace referencia en mi proyecto.

Cuando un programador nuevo se conectó a TFS y sacó mi proyecto del control de código fuente, no pudo compilar porque decía que le faltaban todos los dlls a los que se hacía referencia.

¿Qué hice mal aquí? ¿Cómo puedo incluir esas DLL referenciadas en el control de código fuente? ¿Debo agregar todos estos dlls a mi proyecto antes de hacer referencia a ellos? cuando hice referencia a ellos, simplemente busqué en mi sistema de archivos.

Gracias!

Respuesta

45

He encontrado que la mejor práctica para DLLs de terceros es crear una carpeta "Biblioteca" en su estructura de archivo sln/proj y copiar todas las DLL necesarias en esta carpeta local para referencia. También querrá asegurarse de que estas DLL estén registradas en el control de código fuente. De esta forma, todos los que trabajan en el proyecto obtienen las mismas versiones exactas de todas las DLL, y las rutas de referencia son exactamente las mismas.

Hacer referencia a libs de terceros en una descarga arbitraria o ubicación de instalación será problemático, ya que requerirá que todos los desarrolladores mantengan la misma estructura de descarga para todas las DLL. Además, si todos los usuarios hacen referencia a las DLL fuera de la estructura del proyecto, es más difícil garantizar que todos estén en la misma versión.

La otra opción sería que todos instalen las DLL en el GAC, pero eso también puede ser un problema, especialmente con la administración e implementación de la versión.

+2

Esto tiene la ventaja añadida de que cualquier desarrollador (nuevo o no) podría obtener lo último, presionar F5, y estar en funcionamiento sin el "¿dónde obtengo DLL X o cómo instalo DLL Y? –

+0

Creé el carpeta de la biblioteca en 'sln', tengo que agregar todas las referencias a medida que obtengo el proyecto del servidor. ¿Estoy en el camino equivocado? – Mohsen

+0

En lugar de la carpeta de la biblioteca ... mejor administrar a través del administrador de paquetes NuGet en el nivel de la solución. Estoy de acuerdo con la solución anterior solo en caso de que estos dlls de terceros no estén disponibles a través de nuget. –

1

He intentado varios métodos para hacer frente a esto y he decidido eliminar los dll necesarios en la carpeta bin y asegurarme de que estén incluidos en el proyecto para el control de código fuente. Escuché a la gente decir que esta podría no ser una buena idea, pero nadie me ha dado un buen razonamiento y me ha funcionado bien.

Mi segunda opción sería ahorrar algo de espacio en un recurso compartido de red y organizar los diferentes dll de terceros allí. Puede poner sus archivos en carpetas con números verion para mantener las cosas en orden y todos deberían tener acceso a todo lo que necesitan, siempre y cuando todos usen las rutas de red normales como referencia.

Agregar una carpeta separada dentro del proyecto también es factible pero parece desordenado, ya que terminas con archivos adicionales que no deseas incluir en tu versión.

2

La sugerencia de Andy es buena y la he usado en el pasado. En mi trabajo actual, tenemos una carpeta de "referencia" en un recurso compartido de red para que todos construyamos desde. Sin embargo, aquí tenemos una red muy rápida y todos los desarrolladores están en una sola oficina. Esta solución no funcionará tan bien si tiene muchos desarrolladores remotos o una red lenta.

7

Creé una carpeta "ThirdPartyDLL" en la carpeta de mi proyecto en la que copié todas las DLL adicionales en ella. Luego entré al explorador de código fuente y agregué esos archivos DLL al servidor de la base del equipo para poder estar seguro de que estoy usando las versiones correctas del DLLS para versiones específicas de mi aplicación (y para que todos estén exactamente en la misma página que yo))

Vista - otras ventanas - Fuente coontrol explorador de carpetas proyecto clic derecho - añadir elementos a la carpeta

Usted no será capaz de seleccionar una carpeta específica con DLL en el mismo, pero en su lugar se puede seleccionar el archivo DLL individuo archivos dentro de la carpeta. Luego verá que la carpeta "ThirdPartyDLL" aparece en esa ventana.

Una vez hecho esto, esos dlls están en el control de origen de la base del equipo. Siempre que un desarrollador entre, obtendrá la versión más actual de los archivos DLL.

No olvide eliminar las referencias antiguas en su aplicación y cámbielas a su carpeta thirdpartydll.

Solía ​​copiar los archivos DLL en la carpeta bin, pero el problema que encontré fue cuando los DLL se actualizaron. Inicialmente, cuando mi proyecto era pequeño, no era un gran problema. Ahora que tengo varias DLL y aplicaciones que creé, se volvió muy difícil mantener versiones consistentes de DLL fuera de mi proyecto. Mi mejor ejemplo es el dll de licenciamiento que compré. Cuando se actualizó, todas las aplicaciones y bibliotecas deben estar en la misma versión. Si olvidé uno, tuve problemas extraños o la aplicación simplemente dejó de funcionar. Ahora que tengo todo en una carpeta, realizo el cambio una vez y todo se actualiza.

Espero que esto ayude.

Cuestiones relacionadas