2012-03-05 22 views
7

Tengo dos escenarios:¿Cómo debo hacer referencia a los ensamblajes desde otra solución?

  1. hay un proyecto de marco para la empresa y para todos los proyectos que se van a utilizar este marco.

  2. Existe un proyecto de Marco personalizado que es específico para un cliente y solo algunas personas en la empresa alguna vez necesitarán utilizar esta DLL.

Ambos marcos se almacenan en soluciones separadas en TFS.

¿Cómo se deben usar las referencias para otros proyectos? ¿Debo poner ambos conjuntos en GAC o algo así? ¿Debo copiar el ensamblaje de salida manualmente? ¿Qué se recomienda, por qué y cómo lo uso?

+0

Si bien esto puede no ser valioso para su situación, si estuviera utilizando la subversión, svn: externos habría sido una solución bastante simple de esta situación. – Candide

Respuesta

4

marco personalizado

Copia el conjunto de salida de forma manual para el proyecto personalizado a menos que se puede incluir es de código directamente en la solución.

marco compartido

me gustaría utilizar Nuget en lugar de GAC cualquier otro momento desde que deshacerse de cualquier problema de versiones o tener que crear un paquete de instalación independiente de marco (ya que GAC)

es fácil para crear un servidor nuget privado. Simplemente cree un nuevo proyecto de MVC3 e instale el paquete de servidor nuget: http://docs.nuget.org/docs/creating-packages/hosting-your-own-nuget-feeds

5

Agregue el ensamblado al que se hace referencia a una carpeta de biblioteca en los otros proyectos y actualícelo manualmente. Considere usar su propio feed NuGet si se actualiza con frecuencia.

1

Debe compartir ensamblajes instalándolos en la memoria caché de ensamblaje global solo cuando lo necesite. Como regla general, mantenga las dependencias de ensamblado privadas y ubique ensamblados en el directorio de la aplicación a menos que se requiera explícitamente compartir un ensamblaje. Además, no es necesario instalar ensamblajes en el caché de ensamblados global para hacerlos accesibles a la interoperabilidad COM o al código no administrado

Pondré el primer marco ddl en el GAC debido a lo anterior.

Yo pondría el segundo marco en una carpeta diseñada bajo sus TFS llamados por ejemplo "biblioteca" donde se agregue una referencia a partir de (Todo el equipo debe tener la misma estructura de carpetas para evitar referencias faltantes)

1

Así # 2 el proyecto de marco personalizado es lo mismo que # 1, pero personalizado para un cliente en particular?

¿Tendría sentido hacer que el código fuente del Framework personalizado sea una rama del código fuente normal del Framework, en lugar de mantenerlo como una solución real separada? Supongo que dependerá de cuán extensas sean las diferencias.

Como yo lo veo, la ventaja de convertirlo en una sucursal es que usted debería poder fusionar más fácilmente los cambios entre las dos ramas. Imagine que se ha corregido un error o una nueva característica en el n. ° 1 y también se debe aplicar al n. ° 2; TFS debería poder hacer esto más fácil, siempre que TFS sepa que # 2 es solo una rama de # 1.

De todos modos, para llegar al punto de su pregunta, mi pensamiento es que sus otros proyectos deben hacer referencia a los conjuntos de salida de estos proyectos.

Copiaría los ensamblados de Framework en una carpeta debajo de la carpeta de la solución de sus otros proyectos. Generalmente llamo a la mía "Dependencias", pero realmente no importa. Haga que sus proyectos agreguen una referencia a esos archivos de ensamblaje. Supongo que sus ensamblajes de Framework personalizados tendrán el mismo nombre que los ensamblajes de Framework normales, por lo que puede fácilmente intercambiar esos archivos según sea necesario (o crear ramas separadas de sus proyectos que usen el Framework personalizado).

No recomendaría poner los ensambles en el GAC, porque es fácil tropezarse durante el desarrollo si olvida desinstalar una versión anterior del ensamblaje del GAC.

3

Me parece una referencia de proyecto clásico frente a la toma de decisiones de referencia binaria. Deja el GAC fuera de esto.

En las topologías que se asemeja a su requerimiento usamos algo como esto:

 
|___$/3rdParty/ 
|  |__BaseFramework.dll 
|  |__CustomFramework.dll 
|  |__log4net.dll 
|  |__WPFToolkit.dll 
| 
|___$/Sources/ProjectName/NormalProject.sln 
|       | 
|       |__[Binary Reference] "../../3rdParty/BaseFramework.dll" 
|       |__[Project Reference] 
|       |__[Project Reference] 
| 
|___$/Sources/Common/BaseFramework.sln 
|     | 
|     |__[Project Reference] 
|     |__[Project Reference] 
|     |__[Project Reference] 
|     |__[Project Reference] 
| 
|___$/Sources/Custom/Acme/AcmeProject.sln 
|       | 
|       |__[Binary Reference] "../../../3rd-party/CustomFramework.dll" 
|       |__[Project Reference] 
|       |__[Project Reference] 
| 
|___$/Sources/Custom/CustomFramework.sln 
        | 
        |__[Project Reference] 
        |__[Project Reference] 
        |__[Project Reference] 
        |__[Project Reference] 

Cuestiones relacionadas