开发者

Nant Script using .Net 2? Why?

I have a very simple setup, a whole solution that builds using .NET 3.5. Runs fine on my machine, and the build server. I have since added a script to my build file, which will create an XML file, listing all the updates for our patcher. This runs fine on my machine, but not at all on the build server.

I have attached the output below, strangely enough, it seems to be compiling the script in .NET 2.0? Which will never work, because LINQ is present in the script.

Anyone have any ideas? Thanks in advance...

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.


I too was having this problem and had to stop using 3.5 features in my NAnt script.

It appears as though NAnt is compiling the code from your block using the v2.0 compiler as NAnt itself was built with the v2.0 compiler.

There is a hack to the NAnt source code suggested here:

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


It says at the top that target framework is 3.5 and the build succeeded, so I think you're okay. It looks like 2.0 is just the version of the framework that generated the NAnt script.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜