NANT中的脚本任务现在抱怨SortedDictionary

时间:2012-08-26 00:52:49

标签: nant

我一直在尝试将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(以及另一次重启)并未修复它。

2 个答案:

答案 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。有关详细信息,请查看该问题。