Así es como protegemos contra eso en mi empresa. (Su kilometraje variará!)
Cualquier referencia que no sea del sistema (o no GAC) proviene de nuestro servidor de desarrollo, que cada desarrollador ha asignado a su W: unidad. Tenemos un directorio DLL común, con subdirectorios por cliente (o proveedor) y otros subdirectorios según corresponda. No hay archivos DLL alguna vez almacenados en el control de código fuente, excepto license.dll según sea necesario por Infragistics de vez en cuando.
Para bibliotecas proporcionadas por proveedores (EntLib, Infragistics, etc.), como política que hacemos referencia desde la unidad W :. Período. Nadie está autorizado para hacer referencia desde ningún otro lado. Esto codifica la sugerencia en los archivos del proyecto en una ruta común.
Para bibliotecas internas (proyectos internos y de clientes), nuestro proceso de integración continua genera los archivos DLL en la rama correspondiente de este directorio, de nuevo, de donde provienen todas nuestras referencias.
Esto ralentiza nuestro tiempo de compilación local (para la depuración local), ya que VS actualizará automáticamente estas contra el servidor cada vez. Es una molestia (a veces un proyecto puede tomar 5 o 6 minutos para construir localmente), pero es un mal necesario trabajar con personas que usan referencias diferentes. La ventaja aquí es que tan pronto como alguien revisa el código de una de esas referencias, el servidor de CI inicia una compilación y todo el mundo lo acelera rápidamente.
El truco para esto es un proceso de compilación estable y repetible y un servidor de integración continua. Estamos usando CruiseControl.NET, integrado con las compilaciones NAnt, pero inserte aquí su servidor de CI favorito y herramienta de compilación.
Hasta ahora no hemos tenido ningún problema como resultado de este proceso, excepto cuando el servidor de compilación se activa mientras nuestro sistema de control de origen (también conocido como Demon Spawn, vea tantos de mis comentarios recientes) realiza un gran Check-in de múltiples archivos. (Dado que Demon Spawn no es compatible con los registros de transacciones). Sin embargo, esto es algo muy raro, tal vez una vez cada 5 o 6 semanas. Y una reconstrucción de la fuerza inmediatamente después se ocupa de ello.
Solo algunas reflexiones ... Esta técnica debería evitar que las personas arruinen el control de su fuente, y como una ventaja adicional, reduzca el tamaño de su control de fuente ya que no va a comprobar las DLL, solo dll.refresh archivos.
Sí, es una mierda, es exactamente por eso que nunca puse nada en GAC. –
También parece que el problema es con sus desarrolladores, tal vez podría hacer algo para enseñarles a no cometer este error, es decir, cada vez que alguien comete un error, paga 5 $, eso debería ayudarlos a recordar :) –
El problema principal era con ensamblajes GAC como los controles DevExpress. Terminamos asignando a 1 persona a ser responsable de actualizar la carpeta lib con ensamblajes de terceros y nadie más tenía permiso para instalarlos. Fue un poco doloroso para esos controles, pero funcionó. – NotMe