【发布时间】: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