我有一个非常简单的设置,一个使用 .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 编译器从您的块中编译代码,因为 NAnt 本身是使用 v2.0 编译器构建的。
这里建议对 NAnt 源代码进行破解:
http://www.mail-archive.com/[email protected]/msg11867.html
关于c# - 使用 .Net 2 的 Nant 脚本?为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4750237/