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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Pedro Luna Montalvo
23/07/2004 - 16:06 | Informe spam
Saludos,

Quisiera hacer unas observaciones:

* Debido a que usas compilacion condicional, ambos ensamblados serian
diferentes y usar el mismo nombre en mas de un caso podria traerte
confuciones sobre la version que tienes en determinado momento

* Si mucho del codigo esta compartido, no seria mejor dividir tuproyecto en
tres: uno con todo el codigo compartido, otro con el codigo Windows y otro
con el codigo Web??

Segun esto, y si tu respuesta es que aun quieres mantener tu esquema actual,
te agrego una sugerencia que involucra el uso de SourceSafe:

1. Crea dos proyectos, ComponenteWindows y otro ComponenteWeb, y agregalos a
SourceSafe, a una misma base.
2. Agrega tus archivos de codigo a uno de los proyectos anteriores y subelos
a Sourcesafe.
3. En Sourcesafe, usa la opcion de Compartir archivos y comparte los
archivos de codigo con el otro proyecto (ojo, usa Compartir y no Bifurcar!!)
4. Agrega los archivos compartidos al segundo proyecto.

Con esto, las modificaciones que hagas a uno de los archivos se mantendra
para ambos, pues SourceSafe mantendra la referencia de que es un mismo
archivo compartido por ambos proyectos.

Saludos
Pedro Luna, MVP
Gye, Ecu

escribió en el mensaje
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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida