2016-07-20 10 views
0

Ich habe eine C# Datei mit so etwas zu übergeben. Es ist NICHT möglich, QueueName in etwas anderes als eine Kompilierzeitkonstante zu ändern.Mögliche eine Konstante C# Compiler in Build-Skript

Gibt es eine Möglichkeit, eine "Pre-Compiler" -Variable an diese Deklaration zu übergeben, die in einer Build-Konfiguration oder einem Build-Skript geändert werden könnte?

Ich habe es gegooglet, aber ich kann nicht scheinen, irgendeine Lösung zu bekommen.

+0

Sie können eine CS-Datei mit dieser Konstante erstellen, die Teil der Zusammenstellung ist und nur einen Build-Schritt hinzufügen, die vor dem Kompilieren die Datei modifiziert. –

+0

Sie können eine T4-Vorlage verwenden, um den Code für Ihre Konstante zu generieren. In der T4-Vorlage könnte es eine Umgebungsvariable oder eine Datei oder .... lesen, um den in die Zeichenfolge einzufügenden Wert zu erhalten. – Derek

Antwort

1

Da dies Konstanten sind, können Sie code generation with a T4 template zum Generieren der Konstanten und die Werte auf Build in einer separaten Klassendatei verwenden.

Die richtigen Konstantenwerte aus dieser Klassendatei können aus einem Array, einer Datenbank oder einer anderen externen Quelle stammen.

-Code wäre so etwas wie:

<#@ output extension=".cs" #> 
    <# 
     using(SampleContext context = new SampleContext) 
     { 
     string queuename = context.Queuename.FirstOrDefault(); 
     } 
    #> 
    internal class NotSoConstantConstants 
    { 
     public const string QueueName = "<#= queuename #>"; 
    } 

, die Ausgabe kann:

internal class NotSoConstantConstants 
{ 
    public const string QueueName = "abc"; 
} 
1

Ich habe vor kurzem ein Werkzeug geschaffen, dies zu tun, es Injektion von Umgebungsvariablen bei der Erstellung ermöglicht.

Ich denke, es ist eine sauberere Lösung als T4, aber es ist wirklich eine persönliche Vorliebe.

Schauen Sie sich das Projekt https://github.com/bonyjoe/EnvVariableInject