我一直在尝试将Nant从0.86-beta1升级到0.92,我的构建服务器运行Cruise Control.Net。现在(似乎自我重新启动服务器以来),<script>
任务失败。即使回归旧的南特也无济于事。这是任务:
<script language="C#">
<code>
<![CDATA[
public static void ScriptMain(Project project)
{
System.Collections.Generic.SortedDictionary<string, string> sortedByKey = new System.Collections.Generic.SortedDictionary<string, string>();
foreach(DictionaryEntry de in project.Properties)
{
sortedByKey.Add(de.Key.ToString(), de.Value.ToString());
}
NAnt.Core.Tasks.EchoTask echo = new NAnt.Core.Tasks.EchoTask();
echo.Project = project;
foreach(System.Collections.Generic.KeyValuePair<string, string> kvp in sortedByKey)
{
// Omit the many boring nant.tasks properties
if(kvp.Key.StartsWith("nant.tasks"))
continue;
echo.Message = String.Format("{0}: {1}", kvp.Key, kvp.Value);
echo.Execute();
}
}
]]>
</code>
</script>
这是我从某处复制的脚本,用于回显所有已定义属性的值作为调试辅助工具。 Nant抱怨在命名空间SortedDictionary
中找不到System.Collections.Generic
,尽管它应该在.Net 2.0(Nant 0.86-beta1使用)和.Net 4.0(Nant 0.92)中)。它在程序集System.DLL中,所以看起来Nant应该能够找到它。
要进行Nant升级,我只是将新版本安装在先前版本旁边的文件夹中,并更改了PATH变量。出于某种原因,重新启动CC.Net服务还不足以让它开始使用新版本,但重新启动计算机就可以了。但后来我开始遇到这个问题。重新切换PATH(以及另一次重启)并未修复它。
答案 0 :(得分:2)
这对我来说听起来很奇怪。
您是否尝试将引用和命名空间部分放入<script>
任务的参数中?只是一猜......
<script language="C#" >
<references>
<include name="System.dll" />
</references>
<imports>
<import namespace="System.Collections.Generic" />
</imports>
<code>
<!-- ... -->
</code>
</script>
答案 1 :(得分:0)
远景:您是否可能安装了.NET 1.1并且它以某种方式使用了那个?
要进行仔细检查,您是否可以使用编译的脚本替换错误脚本并让该脚本打印出version of the .NET framework used?
编辑实际上我发现another question in Stackoverflow有类似的问题。显然,NAnt默认不会引用System.dll。有关详细信息,请查看该问题。