2010-11-24 24 views
5

Actualmente estoy trabajando con C# y desarrollando algunas aplicaciones de Silverlight que utilizan los servicios web de SharePoint como fuentes de datos.¿Configurando valores en tiempo de compilación en Visual Studio (C#)?

Los administradores de sharepoint decidieron que para "segregar" a los usuarios, tenían que crear la misma lista de multipuntos varias veces, y otorgar a los usuarios de cada rama acceso a la lista correspondiente para esa rama.

Eso crea un pequeño problema porque tengo que establecer el guid para las listas de SharePoint para cada rama, y ​​compilar 5 versiones diferentes de la misma aplicación.

Finalmente, decidí crear una clase ListProperties, y pasar el nombre de la rama actual a un método para que devuelva el guid correcto.

Así que ahora, que la variable (rama) para "RAMA-A", compilar y cambiar el nombre de la aplicación para "AppBranchA.xap". Luego haz lo mismo para cada rama.

¿Hay alguna forma de pasar una cadena en tiempo de compilación y hacer que la variable (y, con suerte, el nombre de la aplicación también) cambie automáticamente?

Estoy dispuesto a escuchar otras formas de administrar varias construcciones a la vez.

gracias,

Respuesta

2

Una manera de abordar esto es el uso de un símbolo de la compilación condicional para controlar qué se utiliza GUID valor para el conjunto de propiedades específicas de rama. Por ejemplo

class ListProperties { 

#if BRANCH-A 
    public static readonly GUID BranchGuid = "Guid #1"; 
#endif 

#if BRANCH-B 
    public static readonly GUID BranchGuid = "Guid #2"; 
#endif 

} 

Esto le permite controlar el valor de las definiciones de ramificación cambiando los símbolos pre-procesador definidas en la línea de comandos.

Otra opción sería usar un archivo de configuración para almacenar los datos específicos de la sucursal. Luego podría compilar la aplicación una vez e implementarla con diferentes archivos de configuración basados ​​en la rama de destino.

2

Si usa las directivas de precompilación, puede lograrlo.

#if BRANCH_A 
readonly Guid myId = new Guid("some guid"); 
#endif 

#if BRANCH_B 
readonly Guid myId = new Guid("some other guid"); 
#endif 

Si desea obtener realmente de lujo, incluso se podría crear nuevas construcciones (en lugar de depuración y liberación). Luego tiene sus directivas correspondientes definidas para esa compilación.

+0

Esto no se compila. 'GUID' no puede ser un miembro' const' y los literales de cadena no son implícitamente convertibles a 'GUID' – JaredPar

+0

@JaredPar corregidos. Todavía consigue el punto a través. – scottm

3

Suponiendo que está utilizando VS 2010

Puede utilizar Build configurations con el nombre de la sucursal en conjunción con config transforms para cambiar el valor. Entonces solo tienes que construir en cada configuración.

Cuestiones relacionadas