2008-09-16 22 views

cevap

26

Adım 1: sizin için inşa ediyoruz çevreyi izlemek için NAnt komut bir özellik tanımlayın (yerel, test, üretim, vb.).

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

Adım 2: Zaten tüm hedefler bağlı olan bir yapılandırma veya başlatma hedefini yoksa, o zaman bir yapılandırma hedef oluşturmak ve diğer hedefler buna bağlıdır emin olun.

<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> 

Adım 3: Çevre özelliğine göre uygun bir özellikler dosyasında çekmek için yapılandırma hedefini güncelleyin.

<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> 

Not, ben ekip üyelerinin kaynak kontrolü kararlı alamadım kendi local.config.xml dosyalarını tanımlamak için izin ister. Bu, yerel bağlantı dizelerini veya diğer yerel ortam ayarlarını depolamak için güzel bir yer sağlar.

Adım 4:

  • nant -D: Eğer NAnt, örneğin çağırmak çevre özelliğini ayarlayın çevreyi = dev
  • nant -D: çevre = test
  • nant -D: environment = prodüksiyon
+0

Sizin hattı mesajı ile benim için başarısız : ". Görev hedefleri izin verilmez proje düzeyinde olmalı" – vakman

0

Böyle bir şey yapmamın yolu, nant task kullanarak yapı türüne bağlı olarak ayrı yapı dosyaları eklemektir. Olası bir alternatif iniread task in nantcontrib'u kullanmak olabilir.

5

Ana yapı dosyasında başka bir derleme dosyası (özelliklerinizi içeren) eklemek için include görevini kullanabilirsiniz. Bir değişkene karşı test edebilirsiniz include görevin if nitelik inşa dosyası dahil edilmesi gerekip gerekmediğini belirlemek için:

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

Benzer bir sorunla da karşılaştım, çünkü scott.caligan'ın cevabı kısmen çözüldü, ancak insanların çevreyi ayarlayabilmesini ve ppropriate özellikler sadece bu yüzden gibi bir hedef belirleyerek dosyası:

  • nant dev
  • nant testi
  • Sen ortam değişkenini ayarlar bir hedef ekleyerek yapabilirsiniz

nant aşaması. Örneğin:

<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>