Frage

Ich möchte eine andere Eigenschaften-Datei laden, basierend auf einer Variablen.

Grundsätzlich, wenn ein Entwickler Build Verwendung Dadurch Properties-Datei, wenn ein Test Build Verwendung tun dies andere Properties-Datei, und wenn eine Produktion aufbauen Verwendung noch eine dritte Eigenschaften tun Datei.

War es hilfreich?

Lösung

Schritt 1: :. Eine Eigenschaft in Ihrem NAnt Skript definieren, die Umwelt verfolgen Sie bauen für (. Lokale, Test, Produktion, etc.)

<property name="environment" value="local" />

Schritt 2 . Wenn Sie nicht bereits eine Konfiguration oder Initialisierung Ziel haben Sie, dass alle Ziele abhängig ist, dann eine Konfiguration Ziel erstellen, und stellen Sie sicher, dass andere Ziele davon abhängen

<target name="config">
    <!-- configuration logic goes here -->
</target>

<target name="buildmyproject" depends="config">
    <!-- this target builds your project, but runs the config target first -->
</target>

Schritt 3: . Ihre Konfiguration Ziel Aktualisieren in einer geeigneten Eigenschaften für die Umwelt Eigenschaftendatei ziehen Basis

<target name="config">
    <property name="configFile" value="${environment}.config.xml" />
    <if test="${file::exists(configFile)}">
        <echo message="Loading ${configFile}..." />
        <include buildfile="${configFile}" />
    </if>
    <if test="${not file::exists(configFile) and environment != 'local'}">
        <fail message="Configuration file '${configFile}' could not be found." />
    </if>
</target>

Hinweis, wie ich die Teammitglieder zu ermöglichen, ihre eigenen local.config.xml Dateien zu definieren, die verpflichtet nicht zur Quellcodeverwaltung erhalten. Dies bietet einen schönen Ort, um lokale Verbindungszeichenfolgen oder andere lokale Umgebungseinstellungen zu speichern.

Schritt 4: : die Umwelt Eigenschaft festlegen, wenn Sie NAnt aufrufen, z.

  • Nant -D: Umwelt = dev
  • Nant -D: Umwelt = test
  • Nant -D: Umwelt = Produktion

Andere Tipps

Sie können die include Aufgabe andere schließen Datei (mit Ihren Eigenschaften) innerhalb der Haupt-Build-Datei erstellen. Das if Attribut der include Aufgabe kann gegen eine Variable testen, um zu bestimmen, ob die Build-Datei enthalten sein sollte:

<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/>
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/>
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/>

Ich hatte ein ähnliches Problem, das die Antwort von scott.caligan teilweise gelöst, jedoch wollte ich Menschen in der Lage sein, die Umwelt zu setzen und die entsprechenden Eigenschaften laden Datei nur durch ein Ziel wie so festgelegt wird:

  • Nant dev
  • Nant Test
  • Nant Stufe

Sie können dies tun, indem Sie ein Ziel hinzu, dass die Umgebungsvariable festlegt. Zum Beispiel:

<target name="dev">
  <property name="environment" value="dev"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="test">
  <property name="environment" value="test"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="stage">
  <property name="environment" value="stage"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="importProperties">
  <property name="propertiesFile" value="properties.${environment}.build"/>
  <if test="${file::exists(propertiesFile)}">
    <include buildfile="${propertiesFile}"/>
  </if>
  <if test="${not file::exists(propertiesFile)}">
    <fail message="Properties file ${propertiesFile} could not be found."/>
  </if>
</target>

So wie ich diese Art der Sache getan haben, ist separate Build-Dateien enthalten nach Art des Build je mit der nant Aufgabe . Eine mögliche Alternative könnte die IniRead Aufgabe in NAntContrib zu benutzen, .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top