2010-08-12 16 views
9

durante el desarrollo de nuestra aplicación utilizamos una estructura de bifurcación y mientras estamos desarrollando otro equipo está utilizando versiones anteriores de nuestro software para crear contenido con él.Ruta de referencia del proyecto en el control de fuente?

Para facilitar el intercambio entre compilaciones y equipos, esperaba utilizar Hintpaths vacíos en los archivos csproj de los proyectos de contenido para que puedan usar nuestros ensamblados GAC instalados y, mientras tanto, agregar una ruta de referencia a los proyectos para nuestro uso durante los ciclos de desarrollo y prueba en los que no deseamos que se instalen ensamblajes en el GAC.

Sin embargo, parece que las rutas de referencia no están almacenadas en el archivo csproj y, por lo tanto, no tienen control de fuente. Como habrá una amplia bifurcación, sería menos que ideal tener que volver a establecer todas las rutas de referencia cuando un desarrollador retire otra rama del control de fuente.

He estado buscando un poco ahora y parece que no puedo encontrar la forma de hacerlo. ¿Alguien sabe de una forma de forzar la ruta de referencia dentro y fuera del control de fuente?

Estamos hablando de Visual Studio 2008 y TFS 2008 aquí.

Cheers, Anton.

+0

En Visual Studio 2010, las rutas de referencia se almacenan como relativas de forma predeterminada, por lo que, si le sucede algo diferente, es incorrecto. En mi caso, era como si hubiera ignorado las dlls ignoradas por el control de versiones para poder compilar la solución pero mis compañeros de trabajo no podían. –

Respuesta

12

Ok, me parece estar un poco más claro en la cabeza después de una buena noche de sueño, di el paso lógico, es decir, investigar dónde exactamente se almacenó la información y cómo. Resultó que la información se almacenó en el archivo .user para el proyecto en la carpeta del proyecto y, como se espera, este archivo contiene mbsuild xml.

luego hice lo que quería de la siguiente manera:

  • crear la ruta de referencia como lo requería para facilitar ambos escenarios sin ningún trabajo.
  • Busque los proyectos.archivo de usuario
  • Copie el PropertyGroup que contiene el ReferencePath
  • Pegue el PropertyGroup en todos los proyectos necesarios '.csproj xml.
  • Recargar y compilar.

Hecho.

+0

Estaba considerando probar esto después de descubrir que el nodo ReferencePath en el archivo .user se parece a algo que vería en un archivo de proyecto. Ahora me siento un poco más seguro yendo en esta posible dirección. – jpierson

+0

Una nota adicional. Cuando copie todo el PropertyGroup, se eliminará en algunas circunstancias (aún no las identifiqué exactamente). Cuando coloca ReferencePath hnode en un PropertyGroup existente, no se eliminará. Al menos eso es lo que me parece hasta ahora. – Anton

0

Las referencias son almacenadas en el archivo * .csproj. Los nodos son ItemGroup/Referencia ...

Thomas

+0

Las referencias son y esos Hintpaths son los que vací, por lo que el equipo de contenido compilará contra las Asambleas en el GAC. Las rutas de referencia del proyecto no son (o no parecen ser) ... y de eso se trata la pregunta. – Anton

0

Esto es bastante simple - que hacemos esto en nuestra tienda.

Primero, en el área de trabajo (usando el Explorador de Windows, vaya a la carpeta Solución), cree una carpeta. Lo llamamos "Asambleas referenciadas". Aquí, suelte todas sus DLL.

Ahora, en la Solución, agregue una nueva carpeta para que coincida con la creada en el Explorador de Windows. En esa carpeta, agregue todas las DLL que acaba de colocar.

Finalmente, en cada proyecto, configure sus referencias para usar las DLL que se agregaron a la solución.

Ahora su proyecto hace referencia a las DLL que son parte de la solución, de modo que cuando la compilación se ejecute, obtendrá la DLL del control de código fuente para generar la compilación.

Además, recomendaría no utilizar el GAC en absoluto si puede evitarlo. En mi experiencia, el comportamiento de referencia es extraño. Parece que las referencias van primero al GAC, luego a la DLL en la carpeta local, lo que significa que si se actualiza la DLL, se utiliza la que está en el GAC en lugar de la DLL en la carpeta local (que probablemente sea la actualizada).

+0

Ya había considerado esto, pero introduce algo de trabajo adicional para el equipo de contenido que prefiero evitar, pero he estado haciendo más búsquedas y parece que no puedo encontrar una manera más fácil de hacerlo, así que puedo terminar usándolo Primero voy a experimentar un poco más :) – Anton

+0

Realmente es lo más fácil: se puede automatizar creando una compilación que construye el proyecto inicial, comprueba las DLL de la solución de destino y copia las nuevas DLL compiladas en la fuente de destino control, pero configurar esto puede ser excesivo. A menos que tenga que manejar una gran cantidad de archivos DLL, el trabajo adicional no es realmente significativo. – Russ

Cuestiones relacionadas