c# - nant脚本c#编译错误

标签 c# cruisecontrol.net nant

不幸的是,我对 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?

最佳答案

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

 nant -f:MyBuildFile.build

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

关于c# - nant脚本c#编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6184087/

相关文章:

c# - 如果 NDepend 查询引发警告,我如何自动使 nant 构建失败

c# - '<', 十六进制值 0x3C, 是一个无效的属性字符

c# - C# 获取小数点后精确的精度数

.net - CruiseControl "Unused node detected"将 xmlns 添加到 Project 节点时出错

asp.net - System.Net.Http 无法在当前目标框架 .NET 4.0 中解析

c++ - 如何将我自己的编译器与 Nant 一起使用?

c# - 用鼠标右键单击时如何为上下文菜单上的特定项目着色?

c# - 如何使用 Scintilla 的语法突出显示?

msbuild - CruiseControl.NET 与 Web 部署项目

cruisecontrol.net - 从 stylecop 检查中排除文件