2009-04-16 23 views
6

Sadece NAnt kullanmaya başladım. Bir eğiticiden çalışıyordum ve sadece çözümümdeki çözümü temizlemek için bir hedef belirlemeye çalışıyordum.NAnt'de Çalışma Dizini Nasıl Ayarlanır?

  • Çözüm Klasör
    • Proje Klasör
    • Proje Klasör
    • Araçlar Klasör
      • NAnt Klasör
  • şu şekildedir: Benim Visual Studio Solution yapıdır

NAnt .exe dosyası Araçlar/NAnt klasöründe bulunur. .build dosyam da içeride. İşte benim .build dosyam:

<?xml version="1.0" encoding="utf-8" ?> 
<project name="NAntTest" default="build" xmlns="http://nant.sf.net/release/0.86-beta1/nant.xsd"> 
    <property name="solution.file.name" value="NAntTest.sln" /> 
    <property name="project.config" value="debug" /> 

    <target name="build" depends="clean.source" /> 

    <target name="clean.source"> 
    <exec program="${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe" 
      commandline="${solution.file.name} /t:Clean /p:Configuration=${project.config} /v:q" 
      workingdir="."/> 
    </target> 

</project> 

Takip ettiğim örnek bu şekilde biçimlendirilmiştir. Bu yapıyı çalıştırmayı denerseniz, proje dosyasının mevcut olmadığını belirten bir hata alıyorum. Clean.source hedefinde, basedirdüm klasörüne sabit kodlanmış bir yol ile workingdir niteliğini değiştirirsem, betik derler ve düzgün çalışır. Açıkçası, bu projeyi herhangi bir yere taşımam gerekirse, taşınabilirlik için ideal değildir.

NAnt'i temel çalışma dizinini nasıl görebilirim?

cevap

7

Benim önerim, her zaman derleme düzeyinde bir çözüm dosyası yerleştirmektir. Daha sonra, yapı dosyasındaki tüm göreli yollar, çözümünkiyle eşit olacaktır.

+0

Bunu çalışma çözüm dizinine taşıdım. Yardım için teşekkürler! –

+0

Hm, bir downvote? Niye ya? –

+1

Çalışacak, ama demek istediğim, tavsiye tam olarak doğru değil. Sadece uygun şekilde yönlendirmeyi ayarlayın. (Btw, o kadar düşkün değildim) – BrainSlugs83

2

Proje düğümünün basedir özniteliğini ayarlamayı deneyebilirsiniz. Bu probleminizi çözebilir.

<project name="NAntTest" default="build" basedir="C:\Code\MyProject" xmlns="http://nant.sf.net/release/0.86-beta1/nant.xsd"> 
+1

(yani ".. \ .."). – BrainSlugs83

+0

Bu, göreceli bir yol kullanma yorumunun yanı sıra doğru yanıttır. –

1

Nant exec task'un ayrıntılı özniteliğini ayarlarsanız, oluşturduğu tam komut satırını tükürür. Belirli bir problemin ne olduğundan emin olmadığınız için msbuild - nantcontrib msbuild task yerine kullanıyorum.

7

Orada geçerli dizini değiştirmek için fonksiyon yerleşik değil, ancak bir komut dosyası bloğunda bir tane oluşturabilirsiniz: Eğer komut veya kodunuzda geçerli dizinde güvenerek kaçınmalıdır Tabii

<target name="foo"> 
    <echo message="Current directory set to ${directory::set-current-directory('C:')}"/> 
    <echo message="Current directory is now ${directory::get-current-directory()}"/> 
    </target> 

    <script language="C#" prefix="directory"> 
    <code><![CDATA[ 
    [Function("set-current-directory")] 
    public static string SetCurrentDirectory(string path) 
    { 
     System.IO.Directory.SetCurrentDirectory(path); 
     return path; 
    } 
    ]]></code> 
    </script> 

.

0

exec öğenizde tanımlayabileceğiniz bir workingdir özniteliği var.

documentation, workingdir'a göre, "Komutun yürütüleceği dizin" anlamına gelir. bir işlevi yerine bir görev olarak

0

:

<?xml version="1.0"?> 
<project name="test" default="build"> 
    <script language="C#" prefix="path" > 
     <code> 
      <![CDATA[ 
      [TaskName("set-current-directory")] 
      public class SetCurrentDirectory : Task { 
       private string _path; 

       [TaskAttribute("path", Required=true)] 
       public string Path { 
        get { return _path; } 
        set { _path = value; } 
       } 

       protected override void ExecuteTask() { 
        System.IO.Directory.SetCurrentDirectory(_path);; 
       } 
      } 
      ]]> 
     </code> 
    </script> 

    <target name="build"> 
     <set-current-directory path="c:\Program Files" /> 
     <echo message="${directory::get-current-directory()}" /> 
    </target> 
</project> 

Çıktı: Muhtemelen göreli bir yol kullanarak basedir belirlesin

$ nant 

build: 

    [echo] c:\Program Files