5

Sto usando SlowCheetah per XML che trasforma un gruppo di file di configurazione in un progetto.È possibile che più configurazioni di configurazione condividano una trasformazione di configurazione?

Tuttavia, questa stessa soluzione fa parte di un'impostazione di bilanciamento del carico, in cui alcuni valori di configurazione differiscono tra i diversi server (due, in questo caso).

Ho il seguente costruire configurazioni

  • debug
  • uscita
  • Release.Test
  • Release.Prod1
  • Release.Prod2

Quasi tutto in uscita. Prod1 e Release.Prod2 sono identici, ad eccezione di alcuni valori i n uno dei file di configurazione. C'è un modo in cui posso avere un file come Something.Release.Prod.Config da utilizzare su entrambe queste configurazioni di build invece di avere due file identici (Something.Release.Prod1.Config e Something.Release.Prod2.Config)?

... e per elaborare: In questo caso sto distribuendo a due ambienti, quindi un file duplicato non è davvero una grande crisi. Cosa succede se hai dieci o cento server? Non vedo alcun motivo per cui una configurazione con un server CI (in particolare TeamCity in questo caso) non dovrebbe essere in grado di farlo, anche se suppongo che più impostazioni personalizzate siano comuni in tali ambienti.

Come si gestisce di solito questo?

Suppongo di poter eseguire qualche copia magica dei file avanti e indietro come passo di costruzione prima che avvenga la trasformazione effettiva, ma questa sembra una soluzione complicata e complicata.

+0

qualcosa che stiamo cercando di capire anche qui ... I modelli T4 vengono proposti ma non mi piacciono particolarmente. Preferisco la trasformazione di configurazione ma vorrei estenderla oltre le versioni di Debug & Release. Proprio come stai cercando di capire –

+1

Estendere oltre il debug e rilasciare è facile, questo è solo aggiungere ulteriori configurazioni di build dal menu Build => Build Configurations . Rendere alcuni di loro condividono un file, tuttavia ... –

risposta

1

Le trasformazioni di configurazione sono gestite dalla variabile $ (Configuration) nel file TransformsFiles.targets.

<TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')" 
        Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)" 
        Destination="@(_FilesToTransformNotAppConfig->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" 
        Condition=" Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)') " /> 

Qui, è possibile modificare $ (Configurazione) come qualsiasi altro valore, come "Ambiente". Poi basta impostare la variabile "ambiente" nelle args MSBuild -

/p:Environment=Prod 

Questo dovrebbe consentire di mantenere le impostazioni di compilazione e fare il vostro trasforma in modo indipendente.

Problemi correlati