2011-04-20 22 views
5

Bien, entonces tenemos una solución bastante grande con aproximadamente 8 proyectos diferentes dentro de ella. Cada uno de estos proyectos depende de varias asambleas de terceros diferentes. Esta solución está en la rama troncal del control de origen. También tenemos alrededor de 5 ramas diferentes fuera del tronco.¿Dónde debe almacenar ensamblajes de terceros?

¿Cuál es la mejor forma de gestionar estos conjuntos de terceros? Cuando agregas una referencia a un ensamblaje y luego haces clic en él y ves la ventana de propiedades, noto que tiene una ruta codificada para el ensamblaje.

Por ejemplo: Todas nuestras sucursales están mapeadas a "C: \ Code \". Entonces trunk sería "C: \ Code \ Trunk" y una rama sería "C: \ Code \ somebranch".

Si creo una carpeta en "C: \ Code \ Trunk" llamada "Ensambles" y luego dejo caer todos nuestros ensamblajes de terceros en esa carpeta, y luego agrego una referencia a un ensamblado allí está esa referencia de ensamblaje relativa ? Si hago clic en el conjunto agregado, veo que la propiedad de la ruta atenuada dice "C: \ Code \ Trunk \ Assemblies \ someassembly.dll".

¿Qué sucede si me desvío del tronco? ¿Alguna "rama" todavía tendría una referencia a "C: \ Code \ Trunk \ Assemblies \ someassembly.dll" o haría referencia a "C: \ Code \ somebranch \ Assemblies \ someassembly.dll"?

Actualmente, en realidad tenemos una rama en el control de origen llamada "Ensambles" que se asigna, al igual que cualquier otra rama, a "C: \ Código \". Por lo tanto, todas las ramas con proyectos que hacen referencia a ensamblados tienen referencias a "C: \ Code \ Assemblies \ someassembly.dll" sin importar en qué rama se encuentre el proyecto, la ruta sería la misma.

Desafortunadamente, esto significa que debe obtener la última versión de la sucursal en la que está trabajando Y los ensamblajes se ramifican para que la solución se desarrolle correctamente.

Para resumir todo:

  • ¿Cómo agregar una referencia que es relativo a la solución? (es decir, agregue una referencia a C: \ Code \ Trunk \ Assemblies \ someassembly.dll y haga que esa ruta sea relativa al proyecto que la agregó, de modo que al crear una bifurcación haga referencia a la carpeta de ensamblados ramificados y no a la de ensamblados de troncales. es esta referencia ya relativa?

  • ¿Cuáles son otras estrategias recomendadas para el manejo de los conjuntos de 3 ª parte?

Respuesta

2

Sí, use una carpeta de ensamblados fuera del tronco. Me gusta el nombre de lib mejor que las asambleas.

Sí, la ruta ya es relativa. Cuando ramas sus proyectos obtendrá la carpeta de ensamblados correcta.

Dependiendo de la cantidad de ensamblajes de terceros que esté utilizando, también desea organizar su carpeta de ensamblados para que no sea un gran desastre para dlls.

+0

derecho tenemos LOS asambleas carpeta dividen en ordenadas subdirectorios. Siempre que estos caminos sean relativos, supongo que no es un problema. Gracias por la ayuda. – Chev

0

por lo general creo un proyecto común que hacen referencia a todos los demás. Dentro de ese proyecto común, creo una carpeta llamado deps (para dependencias). Cada uno de los otros proyectos hace referencia a la copia de la DLL en la carpeta deps del proyecto común.

5

Ahora tenemos nuget puede usarlo para todos los paquetes oss compatibles e incluso crear your own nuget packages para otros conjuntos de terceros. Vale la pena mencionar openwrap como una alternativa a nuget.

paquetes de tiendas a nivel NuGet solución

por lo que cada rama (y tronco) mantendrían una versión de estos.

Sugeriría que es comportamiento preferible. Desea mantener separada su versión de ensamblajes si actualiza un tercero, por ejemplo.

En el pasado he usado el comando svn's externals para compilar la versión específica de las dependencias desarrolladas internamente. No hay ninguna razón por la que no pueda colocarlos en un repositorio y usar externos (o el equivalente de scm) para obtener la versión correcta.

He utilizado eventos de compilación para colocar los dlls en el lugar correcto también.

1

Tenemos una carpeta SolutionItems en nuestra solución para las referencias de terceros. Cada rama de la solución tiene su propia copia.

Cuando agregamos una referencia utilizamos la pestaña 'Examinar' en el cuadro de diálogo agregar referencia y seleccionamos el ensamblaje relativo a nuestro proyecto actual.

el archivo de proyecto contiene lo siguiente:

<Reference Include="SomeAssembly, Version=0.1.0.0, Culture=neutral, PublicKeyToken=8xxxxxxxxxxx, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Solution Items\SomeAssembly.dll</HintPath> 
</Reference> 
Cuestiones relacionadas