2011-05-31 82 views
2

不幸的是,我對NANT的知識非常有限,但今天開始更新我們的構建以運行一些代碼。我們使用巡航控制。nant腳本c#編譯錯誤

這工作正常 - 但我需要處理兩個文件夾,所以試圖將通用代碼放入傳統的C#方法。

<echo message="Ensure only 4 directories in the backup directory"/> 
    <script language="C#"> 
     <code> 
     <![CDATA[ 
    public static void ScriptMain(Project project) 
    { 
     string path = project.Properties["build.ReleasesShareLocation.BackupParent"]; 
     string [] folders = System.IO.Directory.GetDirectories(path,"*", System.IO.SearchOption.TopDirectoryOnly); 

     System.Collections.ArrayList dirlist = new System.Collections.ArrayList(); 
     foreach (string folder in folders) 
     { 
      dirlist.Add(new System.IO.DirectoryInfo(folder)); 
     } 
     dirlist.Sort(new DirectoryInfoDateComparer()); 
     dirlist.Reverse(); 

     for (int i = 4; i < dirlist.Count; i++) 
     { 
      string foldername = ((System.IO.DirectoryInfo)dirlist[i]).Name; 
      try 
      { 
       ((System.IO.DirectoryInfo)dirlist[i]).Delete(true); 
       project.Log(Level.Info, String.Format("Deleted folder {0}", foldername)); 

      } 
      catch { project.Log(Level.Warning, String.Format("Unable to delete folder {0}", foldername)); } 
     } 
    } 

    internal class DirectoryInfoDateComparer : System.Collections.IComparer 
    { 
     public int Compare(object x, object y) 
     { 
      System.IO.DirectoryInfo di1 = (System.IO.DirectoryInfo)x; 
      System.IO.DirectoryInfo di2 = (System.IO.DirectoryInfo)y; 

      return di1.CreationTime.CompareTo(di2.CreationTime); 
     } 
    } 
    ]]> 
     </code> 
    </script> 

而不是重複所有的代碼 - 我試圖添加一個靜態類的方法來做所有的處理,使主只傳遞兩個路徑。但在運行服務器上的構建(有沒有辦法讓我「編譯」本地?)它錯了。

這是錯誤的代碼 - 我不確定是否錯過了一個簡單的語法錯誤(我嘗試在Visual Studio中複製和粘貼代碼以確保括號和內容匹配),或者如果有一種不同的方式我需要做的是在NAnt構建..

<echo message="Ensure only 4 directories in the backup directory"/> 
    <script language="C#"> 
     <code> 
     <![CDATA[ 
    public static void ScriptMain(Project project) 
    { 
     string path = project.Properties["build.ReleasesShareLocation.BackupParent"]; 
     string path2 = project.Properties["build.DeltaScriptFileShareLocation.BackupParent"]; 
     Processor.ProcessFolder(path); 
     Processor.ProcessFolder(path2); 
    } 

internal static class Processor 
{ 
    public static void ProcessFolder(string path) 
    { 
     string [] folders = System.IO.Directory.GetDirectories(path,"*", System.IO.SearchOption.TopDirectoryOnly); 

     System.Collections.ArrayList dirlist = new System.Collections.ArrayList(); 
     foreach (string folder in folders) 
     { 
      dirlist.Add(new System.IO.DirectoryInfo(folder)); 
     } 
     dirlist.Sort(new DirectoryInfoDateComparer()); 
     dirlist.Reverse(); 

     for (int i = 4; i < dirlist.Count; i++) 
     { 
      string foldername = ((System.IO.DirectoryInfo)dirlist[i]).Name; 
      try 
      { 
       ((System.IO.DirectoryInfo)dirlist[i]).Delete(true); 
       project.Log(Level.Info, String.Format("Deleted folder {0}", foldername)); 

      } 
      catch { project.Log(Level.Warning, String.Format("Unable to delete folder {0}", foldername)); } 
     } 
    } 
} 

    internal class DirectoryInfoDateComparer : System.Collections.IComparer 
    { 
     public int Compare(object x, object y) 
     { 
      System.IO.DirectoryInfo di1 = (System.IO.DirectoryInfo)x; 
      System.IO.DirectoryInfo di2 = (System.IO.DirectoryInfo)y; 

      return di1.CreationTime.CompareTo(di2.CreationTime); 
     } 
    } 
    ]]> 
     </code> 
    </script> 

感謝任何幫助:)


編輯:

我回去通過CC日誌和重-read t他錯誤信息 - 這次瞭解它試圖告訴我什麼。原來我需要傳遞我的新方法Project參數。 :)

有沒有辦法能夠編譯代碼而無需運行構建來找到像這樣的錯誤?我嘗試將它粘貼到Visual Studio中,但由於我沒有引用Nant庫,所以沒有有效突出顯示錯誤。還是有什麼可以下載並安裝在開發機器上以引用適當的dll?

回答

1

在重新讀取我在紅色文本牆內發現的錯誤日誌的答案。

原來我需要通過我的新方法項目參數(因爲我指的是項目屬性)。

所以問題解決了!

1

進入命令提示符,手動瀏覽到您安裝NANT的文件夾,並輸入您的NANT build命令,例如:

nant -f:MyBuildFile.build 

這樣,你會看到一個錯誤,我們可以幫助進一步。

+0

這與從cctray運行它不同嗎? (或者你是否認爲這是我可以在本地測試的方式?儘管我只能在服務器上安裝它) – Jen 2011-06-01 00:18:59

+0

Nant的安裝非常簡單且非常簡單(基本上,只是將垃圾箱複製到一個文件夾中),我不看看爲什麼你不會將它安裝在客戶端上進行調試。這是一個命令提示工具,您不必從Visual Studio中引用它,但可以在cmd中運行它並查看它們出現時的錯誤(另一種方法是查看構建服務器的日誌,但是人們往往不會這樣做:)) – veljkoz 2011-06-01 07:39:59

+0

並回答:不,我不指望它不像cctray(我沒有檢查,但cctray可能運行一些額外的參數重定向到它的自定義日誌,但沒有影響執行方式) – veljkoz 2011-06-01 07:41:32