1

我一直在尝试在运行 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 抱怨在 .Net 2.0(Nant 0.86-beta1 使用)和 .Net 4.0(对于 Nant 0.92)中SortedDictionary都不能在 namespace 中找到System.Collections.Generic它,但它应该在哪里。它在程序集 System.DLL 中,所以看起来 Nant 应该能够找到它。

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

4

2 回答 2

2

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

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

<script language="C#" >
  <references>
    <include name="System.dll" />
  </references>
  <imports>
    <import namespace="System.Collections.Generic" />
  </imports>
  <code>
    <!-- ... -->
  </code>
</script>
于 2012-08-26T10:33:50.503 回答
0

远景:是否有可能您还安装了 .NET 1.1 并且它以某种方式使用了那个?

只是为了仔细检查,你能用一个可以编译的脚本替换错误的脚本,并让那个脚本打印出使用的 .NET 框架的版本吗?

编辑实际上我在 Stackoverflow中发现了另一个类似问题的问题。显然,NAnt 默认不会引用 System.dll。请查看该问题以获取更多详细信息。

于 2012-08-27T19:22:16.227 回答