質問

.NET 3.5を使用して構築するソリューション全体で、非常にシンプルなセットアップがあります。私のマシンとビルドサーバーで正常に実行されます。その後、ビルドファイルにスクリプトを追加しました。これにより、XMLファイルが作成され、Patcherのすべての更新がリストされます。これは私のマシンで正常に実行されますが、ビルドサーバーではまったくありません。

不思議なことに、以下に出力を添付しましたが、.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コンパイラで構築されたため、v2.0コンパイラを使用してNantがブロックからコードをコンパイルしているように見えます。

ここで提案されているNANTソースコードへのハックがあります:

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

他のヒント

ターゲットフレームワークは3.5であり、ビルドが成功したと言っているので、大丈夫だと思います。 2.0は、NANTスクリプトを生成したフレームワークのバージョンにすぎないようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top