2010-05-31 9 views
8

Me gustaría saber cómo programar mejor tres ediciones diferentes de mi aplicación C# ASP.NET 3.5 en VS2008 Professional (que incluye un proyecto de implementación web). Tengo una edición (o versión) Light, Pro y Ultimate de mi aplicación. Por el momento, puse todo en una sola solución con tres versiones de compilación en el administrador de configuración y uso directivas de preprocesador en todo el código (hay alrededor de 20 compilaciones en unas diez mil líneas de código, por lo que es supervisable):Cómo programar tres ediciones Light, Pro, Ultimate en una solución

#if light 
//light code 
#endif 
#if pro 
//pro code 
#endif //etc... 

He leído en stackoverflow durante horas y he pensado en encontrar cómo, por ejemplo Microsoft hace esto con sus diferentes ediciones de Windows, pero no encontró lo que esperaba. En algún lugar hay una fuerte discusión sobre si las directivas de los preprocesadores son malas.

Lo que me gusta con esas # IF-directivas es:

  • el código de lado a lado de las diferencias, así que comprenderán el código para los ediciones diferentes después de seis meses
  • y el beneficio especial para no dar código compilado a cabo de otras versiones para el cliente.

OK, explicación larga, pregunta repetida: ¿Cuál es la mejor manera de hacerlo?

Respuesta

7

estaría tentado para gestionar las diferencias durante el tiempo de ejecución con diferentes licencias, y activar/desactivar características que usan esa configuración. Por qué ?

  1. solo tiene que crear una implementable.
  2. se puede probar esta unidad con mucha más facilidad, en lugar de construir 3 versiones y probar esto.
  3. los usuarios pueden actualizar y simplemente ser enviado una nueva licencia. No tendrán que actualizar/reinstalar.

Tiene que sopesar esto con su preocupación por la distribución de una solución que sus clientes no han pagado realmente (y que simplemente puede habilitar mediante una clave de licencia segura adecuada).

+0

Muchas gracias por esta respuesta. He leído mucho sobre las claves de licencia y otros ... Mi opinión actual es esforzarme mejor en el desarrollo de nuevas funciones que invertir tiempo en licencias/ofuscación que lo complica todo y que los piratas informáticos eluden fácilmente. Dado que esta es una aplicación ASP.NET, utilizada en corporaciones: - Envío la edición correcta (Light, Pro ..) a cada compañía - y cargo por año - cerca del final de la licencia aparece un recordatorio (También llamo al cliente) - si no se realiza ninguna renovación, una bomba de tiempo detiene la ejecución - al renovar el envío de una nueva aplicación con bombilla de tiempo diferida – Henry99

0

sugeriría crear las clases y funciones básicas como normales, pero para permitir invalidar esas mathods que serían específicas de la edición.

continuación, se crea un conjunto de luz/pro/última edición que invalida que los métodos.

entonces necesita una fábrica, que instanciate los tipos predominantes correcto dependiendo de la edición.

aquí se puede trabajar con el descriptor de acceso interno y hacer que el código de montaje interno visible para la edición-assemblys

2

Mi primer pensamiento es dividir su software en varios módulos (proyectos/conjuntos), y luego crear tres proyectos de configuración diferentes en su solución, uno para cada versión. En la configuración, solo incluye los módulos que necesita.

Perderá el código "side-by-side", pero en mi humilde opinión esto solo crea métodos complicados, en lugar de código de mantenimiento.Use métodos de extensión, si desea proporcionar más funciones para un tipo o derivar clases.