문제

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top