2012-05-25 32 views
5

Tengo que hacer el mismo programa para dos compañías diferentes (logotipo diferente, nombre diferente). Me gustaría hacer esto automáticamente cuando hago un lanzamiento.Compilar dos versiones del programa C# automáticamente

Estoy pensando en utilizar un archivo de recursos o un conjunto de satélites, pero no estoy seguro de cómo proceder.

¿Cuál crees que es la mejor?

Gracias.

EDIT:

  • Las diferencias son sólo una imagen y una cadena.
  • Me gustaría tener todo generado en un solo clic.
  • Podríamos obtener más clientes en en el futuro.
  • Debo añadir que utilizo SmartAssembly para fusionar todas mis dependencias en un archivo exe.
+0

Depende de qué se necesita exactamente, ¿se trata solo de recursos de marca de texto (y externos) o ...? Tan pronto como X quiera tener las características Y o tenga lógica comercial Z ... –

+0

Hola, esto es recursos mixtos, una imagen y una cadena. ¿Tienes alguna idea? – John

+0

Potencial para más clientes grita modularidad. Esto es para lo que se hicieron los dlls. –

Respuesta

1

Lo mejor que puedo pensar es un script por lotes.

Obtenga su proyecto para los archivos de referencia (imágenes (logotipo), texto (nombre de la empresa), etc.). es decir, C: \ MyProject \ Resources. De modo que cuando el proyecto se construya, los complete en la aplicación/instalador, etc.

De esta manera, puede escribir un script (archivo .bat) que copie los recursos necesarios por empresa.

Paso 1 - Eliminar todos los archivos en la carpeta Recursos

Paso 2 - Uso MSBuild.exe para construir proyectas

Paso 3 - Copiar los archivos necesarios desde la carpeta bin/release a un directorio (es decirC: \ Release \ CompanyA)

Paso 4 - Cambie las variables en la secuencia de comandos para cargar los detalles de la siguiente compañía. Y repita desde el paso 1, de modo que copie los archivos de recursos necesarios y las reconstrucciones.

+1

Gracias por su respuesta. No he pensado en eso, podría ser la mejor solución. – John

+1

Es una solución simple (no del todo elegante), pero si está haciendo más y más empresas, le aconsejo que vaya con las otras soluciones, como el uso de archivos DLL como módulos. O si obtiene más personalizaciones, considere usar algo como Git/SVN y bifurque el proyecto. Luego, automatice un proceso de pago y compilación utilizando herramientas como TeamCity – JonWillis

+0

Finalmente hice un lote y estoy usando un símbolo de compilación condicional para obtener el archivo de recursos correcto. – John

2

La cadena de recursos en ensamblaje separado sería la distribución más fácil.

Pero, sinceramente, tendría que ser una función de personalización. Lo último que desea es mantener los cambios en el logotipo de todos debido a: motivos legales, casos de copywrite, licencia artística caprichosa, etc.

¿Qué es lo que es breve para ... hacer que proporcionen una imagen formateada y asignarles el nombre de la compañía durante la instalación y almacenarla en el registro o en un metaarchivo de algún tipo (XML, manifiesto, etc.)

+0

Gracias por su respuesta. ¿Cómo puedo tener las 2 versiones del ensamblaje separado en un proyecto VS? – John

+0

@Abatonime Deberías compilarlos en diferentes carpetas. –

4

Puede crear una biblioteca de clases que contenga el 99% del código y luego tener dos proyectos que cada referencia la biblioteca común con el 1% que difiere para cada compañía. Luego, una compilación de toda la solución generará un ejecutable para cada compañía. Use esto si las diferencias entre lo que quiere cada compañía es suficiente para que necesite tener un código [ligeramente] diferente.

Como alternativa, puede hacer que las secciones que varían dependen de los datos, no del código. En este caso, podría significar obtener el logotipo de un archivo, en lugar de incrustarlo en el archivo ejecutable, y tener un archivo XML de configuración con el nombre de la empresa. Esto le permitiría tener solo un ejecutable para ambas compañías.

+0

??? Supongo que su compañía nunca tendrá más de 2 clientes ... alguna vez. –

+3

@Xaade ¿Dejó de leer después del primer párrafo? Y también, hay proyectos específicos que muy bien pueden tener solo dos clientes, o más probablemente una versión para "todos" y otra para la empresa que pagó para tener una función personalizada agregada solo para ellos. – Servy

+0

Sí, el primero me lastimó los ojos. –

Cuestiones relacionadas