nant脚本c#编译错误
不幸的是,我对NANT的知识非常有限,但今天开始更新我们的构建以运行一些代码。我们使用cruisecontrol 这很好——但是我需要处理两个文件夹,所以我尝试将公共代码放入传统的c#方法中nant脚本c#编译错误,c#,cruisecontrol.net,nant,C#,Cruisecontrol.net,Nant,不幸的是,我对NANT的知识非常有限,但今天开始更新我们的构建以运行一些代码。我们使用cruisecontrol 这很好——但是我需要处理两个文件夹,所以我尝试将公共代码放入传统的c#方法中 <echo message="Ensure only 4 directories in the backup directory"/> <script language="C#"> <code> <![CDATA[ publi
<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 build中使用其他方法来执行此操作
<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日志并重新阅读了错误消息——这次我理解了它试图告诉我的内容。原来我需要将项目参数传递给我的新方法。:)
有没有一种方法可以编译代码而不必运行构建来查找这样的错误?我尝试将其粘贴到VisualStudio中,但由于我没有引用Nant库,因此无法有效地突出显示错误。或者您是否可以下载并安装到开发人员计算机上,以引用适当的DLL?转到命令提示符,导航到安装NANT的文件夹,然后手动键入NANT构建命令,例如:
nant -f:MyBuildFile.build
这样,您将看到错误,我们可以进一步提供帮助。在重新阅读错误日志时,我在红色文本墙中找到了答案 事实证明,我需要将项目参数传递给我的新方法(因为我指的是项目属性)
所以问题解决了 这与从cctray运行它不同吗?(或者你是说这是我可以在本地测试它的方式吗?虽然我只在服务器上安装了nant)nant的安装非常简单直接(基本上,只是将容器复制到文件夹中),我不明白为什么不在客户端安装它以进行调试。这是一个命令提示工具,您不必从VisualStudio中引用它,但可以在cmd中运行它,并在错误出现时查看错误(另一种方法是查看构建服务器的日志,但人们往往不会这样做:))并回答:不,我不希望它与cctray有所不同(我没有检查,但cctray可能会使用一些附加参数运行它,以重定向到它的自定义日志,但不会影响执行方式)Cool将考虑在本地下载它-然后我需要弄清楚服务器上有什么版本(如果有关系)。因为开发环境是在本地为我设置的(没有Nant)我不必担心添加任何内容。我仍然希望能够“编译”我的代码来查找语法错误,而不必运行构建。主要是因为当前构建记录了太多(不相关)错误,有时很难找到新引入的错误。:)感谢您的帮助!