2011-05-31 83 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