Compilación condicional

23/07/2004 - 10:01 por Anonimo | Informe spam
Hola, les cuento mi caso y a ver si alguien me da ideas
de si voy por buen camino o no.


Tengo una solución sln, con un proyecto C# csproj, que es
una Biblioteca de Clases.
El proyecto contiene una serie de ficheros .cs, con sus
correspondientes clases.

Bien, pretendo a partir de esa solución generar dos DLLs.

Me explico:

En mi proyecto hay un fichero .cs, una clase que tiene
digamos código condicional (#define, #if, etc). Por
ejemplo hay partes de código que sólo se compilarán para
Web y otras para Windows.

Por eso defino una constante de compilación algo así en
el fichero .cs en cuestión:

#define WIN
//#define WEB



public void xxx {

#if WIN

#else
xxxxxxxxxxxxx
#endif

Otra opción es definir la constante de compilación en las
propiedades del proyecto, junto con TRACE:

Constantes de compilacion condicional: TRACE;WIN


Bien, cuando compilo para Windows tendría que tener la
Reference de Windows.Forms, y si es para Web, quitarla y
añadir System.Web.

Esta forma de actuar para esta solución es correcta ? o
existe otra más óptima ?.

Otra cuestión, es que quisiera poder determinar en un
evento de generación Post Build si ha sido compilado
para Windows o para Web (leyendo el valor de la constante
de compilación); es eso posible ?

Saludos a todos.
 

Leer las respuestas

#1 Tomas Restrepo \(MVP\)
23/07/2004 - 12:56 | Informe spam
Personalmente, creo que esta sería una solución suboptima.

Mucho mejor refactorizar el proyecto de tal forma que pudieras tener tres
assemblies separados:
- Uno core con el código que realmente es común
- Uno para winforms que depende del core
- Uno para webforms que depende del core

De esta forma no tendrías que lidiar con multiples compilaciones de la misma
base de código, y se haría mucho más facil corregir problemas.

Tomas Restrepo


wrote in message
news:28c701c4708b$50a34960$
Hola, les cuento mi caso y a ver si alguien me da ideas
de si voy por buen camino o no.


Tengo una solución sln, con un proyecto C# csproj, que es
una Biblioteca de Clases.
El proyecto contiene una serie de ficheros .cs, con sus
correspondientes clases.

Bien, pretendo a partir de esa solución generar dos DLLs.

Me explico:

En mi proyecto hay un fichero .cs, una clase que tiene
digamos código condicional (#define, #if, etc). Por
ejemplo hay partes de código que sólo se compilarán para
Web y otras para Windows.

Por eso defino una constante de compilación algo así en
el fichero .cs en cuestión:

#define WIN
//#define WEB



public void xxx {

#if WIN

#else
xxxxxxxxxxxxx
#endif

Otra opción es definir la constante de compilación en las
propiedades del proyecto, junto con TRACE:

Constantes de compilacion condicional: TRACE;WIN


Bien, cuando compilo para Windows tendría que tener la
Reference de Windows.Forms, y si es para Web, quitarla y
añadir System.Web.

Esta forma de actuar para esta solución es correcta ? o
existe otra más óptima ?.

Otra cuestión, es que quisiera poder determinar en un
evento de generación Post Build si ha sido compilado
para Windows o para Web (leyendo el valor de la constante
de compilación); es eso posible ?

Saludos a todos.

Preguntas similares