【问题标题】:Script task in NANT now complains about SortedDictionaryNANT 中的脚本任务现在抱怨 SortedDictionary
【发布时间】:2012-08-21 01:10:55
【问题描述】:

我一直在尝试在运行 Cruise Control.Net 的构建服务器中将 Nant 从 0.86-beta1 升级到 0.92。现在(似乎从我重新启动服务器开始),<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 抱怨在命名空间System.Collections.Generic 中找不到SortedDictionary,尽管它应该在.Net 2.0(Nant 0.86-beta1 使用)和.Net 4.0(对于Nant 0.92)中。它在程序集 System.DLL 中,所以看起来 Nant 应该可以找到它。

要进行 Nant 升级,我只是将新版本安装在先前版本旁边的文件夹中,并更改了 PATH 变量。出于某种原因,仅重新启动 CC.Net 服务不足以让它开始使用新版本,但重新启动计算机就可以了。但后来我开始遇到这个问题。将 PATH 切换回来(并再次重新启动)并没有解决它。

【问题讨论】:

    标签: nant


    【解决方案1】:

    这对我来说听起来很奇怪。

    您是否尝试将引用和命名空间部分放入&lt;script&gt; 任务的参数中?只是猜测...

    <script language="C#" >
      <references>
        <include name="System.dll" />
      </references>
      <imports>
        <import namespace="System.Collections.Generic" />
      </imports>
      <code>
        <!-- ... -->
      </code>
    </script>
    

    【讨论】:

      【解决方案2】:

      长镜头:您是否也安装了 .NET 1.1 并且它正在使用那个?

      仔细检查一下,您能否将错误脚本替换为可编译的脚本并让该脚本打印出version of the .NET framework used

      编辑实际上我发现another question in Stackoverflow 有类似的问题。显然,NAnt 默认不会引用 System.dll。请查看该问题以了解更多详细信息。

      【讨论】:

      • 这修复了它,不过现在我想知道在升级 Nant 之前它是如何工作的!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多