【问题标题】:nant script c# compilation errornant脚本c#编译错误
【发布时间】:2011-09-05 06:14:12
【问题描述】:

不幸的是,我对 NANT 的了解非常有限,但今天开始更新我们的构建以运行一些代码。我们使用巡航控制。

这很好用——但是我需要处理两个文件夹,所以我试图将通用代码放入传统的 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>

而不是重复所有代码 - 我尝试添加一个带有方法的静态类来完成所有处理,以便 main 只通过两个路径。但是在服务器上运行构建(有没有办法让我在本地“编译”这个??)它出错了。

这是出错的代码 - 我不确定我是否遗漏了一个简单的语法错误(我确实尝试在 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 日志并重新阅读了错误消息 - 这一次了解了它试图告诉我的内容。原来我需要将我的新方法传递给 Project 参数。 :)

有没有一种方法可以编译代码而无需运行构建来查找此类错误?我尝试将它粘贴到 Visual Studio 中,但由于我没有引用 Nant 库,它没有有效地突出显示错误。或者您可以下载并安装在开发机器上以引用适当的 dll 吗?

【问题讨论】:

    标签: c# cruisecontrol.net nant


    【解决方案1】:

    转到命令提示符,导航到安装 NANT 的文件夹,然后手动输入 NANT 构建命令,例如:

     nant -f:MyBuildFile.build
    

    这样您就会看到错误,我们可以提供进一步的帮助。

    【讨论】:

    • 这与从 cctray 运行它有什么不同吗? (或者你是说这是我可以在本地测试它的方法吗?虽然我只在服务器上安装了 nant)
    • Nant 的安装非常直接且非常简单(基本上,只需将 bin 复制到文件夹中),我不明白您为什么不在客户端上安装它以进行调试。它是一个命令提示符工具,你不必从visual studio中引用它,而是在cmd中运行它并查看出现的错误(另一种方法是查看构建服务器的日志,但人们往往不会这样做:))
    • 回答:不,我不希望它与 cctray 不同(我没有检查过,但 cctray 可能会使用一些附加参数运行它以重定向到它的自定义日志,但没有这会影响执行方式)
    • Cool 会考虑在本地下载它——然后我需要弄清楚我们在服务器上有什么版本(如果重要的话)。由于在本地为我设置了开发环境(没有 Nant),我不必担心添加任何内容。我仍然希望能够“编译”我的代码以查找语法错误,而无需运行构建。主要是因为当前的构建记录了太多(不相关的)错误,有时很难找到新引入的错误。 :) 感谢您的帮助!
    【解决方案2】:

    在重新阅读错误日志时,我在红色文字墙内找到了答案。

    原来我需要将 Project 参数传递给我的新方法(因为我指的是 Project 属性)。

    所以问题解决了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2021-06-04
      相关资源
      最近更新 更多