c# - 使用 .Net 2 的 Nant 脚本?为什么?

标签 c# nant nantcontrib nant-task

我有一个非常简单的设置,一个使用 .NET 3.5 构建的完整解决方案。在我的机器和构建服务器上运行良好。我已经在我的构建文件中添加了一个脚本,它将创建一个 XML 文件,列出我们补丁程序的所有更新。这在我的机器上运行良好, 但在构建服务器上完全没有。

我附上了下面的输出,奇怪的是,它似乎是在.NET 2.0 中编译脚本?这永远行不通,因为 LINQ 存在于脚本中。

有人有什么想法吗?提前致谢...

NAnt 0.90 (Build 0.90.3780.0; release; 08/05/2010)
Copyright (C) 2001-2010 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///E:/Build/Importers/nant.importers.build
Target framework: Microsoft .NET Framework 3.5
Base Directory: E:\Build\Importers.

generateUpdateXml:

   [script] Adding assembly NAnt.Core
   [script] Adding assembly System.Xml
   [script] Adding assembly System.Data.Linq
   [script] Adding assembly System.Core
     [echo] Compilation failed:
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(32,22) : error CS1026: ) expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(32,27) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(32,27) : error CS1525: Invalid expression term 'in'
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(32,30) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(32,96) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(33,16) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(34,9) : error CS1031: Type expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(35,28) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(35,28) : error CS1525: Invalid expression term ','
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(35,29) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(36,58) : error CS1002: ; expected
     [echo] c:\Documents and Settings\dean.thomas\Local Settings\Temp\1\fjgfnsgk.0.cs(37,17) : error CS1525: Invalid expression term ')'
     [echo] //------------------------------------------------------------------------------
     [echo] // <auto-generated>
     [echo] //     This code was generated by a tool.
     [echo] //     Runtime Version:2.0.50727.3615
     [echo] //
     [echo] //     Changes to this file may cause incorrect behavior and will be lost if
     [echo] //     the code is regenerated.
     [echo] // </auto-generated>
     [echo] //------------------------------------------------------------------------------
     [echo] 
     [echo] using NAnt.Core;
     [echo] using NAnt.Core.Attributes;
     [echo] using System;
     [echo] using System.Collections;
     [echo] using System.IO;
     [echo] using System.Linq;
     [echo] using System.Reflection;
     [echo] using System.Text;
     [echo] using System.Xml;
     [echo] 
     [echo] 
     [echo] 
     [echo] [FunctionSet("script", "script")]
     [echo] public class nant4430d2e24afc4e1eb4d68138bbb0e3a0 : NAnt.Core.FunctionSetBase {
     [echo]     
     [echo] 
     [echo]         public static void ScriptMain(Project project) 
     [echo]         {
     [echo]             string outputFolder = string.Format(@"{0}\{1}\", project.Properties["publish.dir.NetworkPath"], project.Properties["Project"]);
     [echo]      project.Log(Level.Info, outputFolder);
     [echo]   
     [echo] var allItems = (from file in Directory.GetFiles(outputFolder, "*", SearchOption.AllDirectories)
     [echo]         select new
     [echo]         {
     [echo]             Filename = file,
     [echo]      LastModified = System.IO.File.GetLastWriteTime(file)
     [echo]                });
     [echo]          /*                         
     [echo]            XmlDocument xDoc = new XmlDocument();
     [echo]            xDoc.AppendChild(xDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
     [echo]            
     [echo]            XmlElement feedElement = xDoc.CreateElement("Feed");
     [echo]            XmlElement tasksElement = xDoc.CreateElement("Tasks");
     [echo] 
     [echo]            foreach (var item in allItems)
     [echo]            {
     [echo]             XmlElement fileUpdateElement = xDoc.CreateElement("FileUpdateTask");
     [echo]             string parentFolder = System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(item.Filename));
     [echo]             
     [echo]             fileUpdateElement.SetAttribute("updateTo", item.Filename);
     [echo]             
     [echo]             if (parentFolder == "Importers")
     [echo]             {
     [echo]              //Do this
     [echo]              fileUpdateElement.SetAttribute("apply", "hot-swap");
     [echo]              fileUpdateElement.SetAttribute("localPath", string.Format(@"Importers\{0}", System.IO.Path.GetFileName(item.Filename)));
     [echo]             }
     [echo]             else
     [echo]             {
     [echo]              //Do that
     [echo]              fileUpdateElement.SetAttribute("apply", "app-restart");
     [echo]              fileUpdateElement.SetAttribute("localPath", System.IO.Path.GetFileName(item.Filename));
     [echo]             }
     [echo]                         
     [echo]             //Condition, which we can just use the timestamp of the upload
     [echo]             XmlElement conditions = xDoc.CreateElement("Conditions");
     [echo]             XmlElement fileDateCondition = xDoc.CreateElement("FileDateCondition");
     [echo]             fileDateCondition.SetAttribute("type", "and");
     [echo]             fileDateCondition.SetAttribute("what", "newer");
     [echo]             fileDateCondition.SetAttribute("timestamp", item.LastModified.ToString("dd/MM/yyyy HH:MM:ss"));
     [echo]             conditions.AppendChild(fileDateCondition);
     [echo]             fileUpdateElement.AppendChild(conditions);
     [echo]             tasksElement.AppendChild(fileUpdateElement);
     [echo]            }
     [echo] 
     [echo]            feedElement.AppendChild(tasksElement);
     [echo]            xDoc.AppendChild(feedElement);
     [echo]            xDoc.Save("c:\\testing.xml");       */                         
     [echo]         }
     [echo]     
     [echo]     public nant4430d2e24afc4e1eb4d68138bbb0e3a0(NAnt.Core.Project project, NAnt.Core.PropertyDictionary propDict) : 
     [echo]             base(project, propDict) {
     [echo]     }
     [echo] }
     [echo] 

BUILD SUCCEEDED

Total time: 0.7 seconds.

最佳答案

我也遇到了这个问题,不得不停止在我的 NAnt 脚本中使用 3.5 功能。

看起来好像 NAnt 正在使用 v2.0 编译器从您的 block 编译代码,因为 NAnt 本身是使用 v2.0 编译器构建的。

此处建议对 NAnt 源代码进行破解:

http://www.mail-archive.com/nant-users@lists.sourceforge.net/msg11867.html

关于c# - 使用 .Net 2 的 Nant 脚本?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750237/

相关文章:

c# - 在数据透视字段上应用数字格式

c# - 如何替换已弃用的 csc ant 任务

c# - Nant 和 Nunit2 的问题

.net - Cruise Control .Net 不显示 Nant 构建错误

nant - NAnt 是否有 if/then/else 任务?

build-automation - IIS 站点和 nant/nantcontrib?

c# - IComparable 和 IComparable<T>

c# - 未调用 CreateBehavior()

c# - 任务继续多个任务

.net - nAnt 是否仍受支持并适用于 .net 3.5/VS2008?