我有一个简单的HelloWorld应用程序,我正在尝试使用NAnt构建。但是,即使使用最简单的构建文件,我仍然无法使其工作。下面是我的HelloWorld.build文件。
<?xml version="1.0"?>
<project name="Hello World" default="build">
<property name="nant.settings.currentframework" value="net-3.5"/>
<target name="build">
<echo>Hello</echo>
<exec program="${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe"
commandline="HelloWorld /t:Clean /p:Configuration=Debug /v:q" workingdir="." />
</target>
结果如下。
C:\webdev\HelloWorld>c:\nant-0.86-beta1\bin\NAnt.exe build
NAnt 0.86 (Build 0.86.2898.0; beta1; 12/8/2007)
Copyright (C) 2001-2007 Gerry Shaw
http://nant.sourceforge.net
Buildfile: file:///C:/webdev/HelloWorld/HelloWorld.build
Target framework: Microsoft .NET Framework 2.0
Target(s) specified: build
[property] Target framework changed to "Microsoft .NET Framework 3.5".
BUILD FAILED
INTERNAL ERROR
System.NullReferenceException: Object reference not set to an instance of an object.
at NAnt.Core.FrameworkInfo.get_Version()
at NAnt.Core.Project.UpdateTargetFrameworkProperties()
at NAnt.Core.Tasks.PropertyTask.ExecuteTask()
at NAnt.Core.Task.Execute()
at NAnt.Core.Project.InitializeProjectDocument(XmlDocument doc)
at NAnt.Core.Project.Execute()
at NAnt.Core.Project.Run()
Please send bug report to nant-developers@lists.sourceforge.net.
Total time: 0 seconds.
此外,当我尝试手动设置要使用的.NET框架时,我得到以下内容:
C:\webdev\HelloWorld>c:\nant-0.86-beta1\bin\NAnt.exe -t:net-3.5
NAnt 0.86 (Build 0.86.2898.0; beta1; 12/8/2007)
Copyright (C) 2001-2007 Gerry Shaw
http://nant.sourceforge.net
Microsoft .NET Framework 3.5 (net-3.5) is not installed, or not correctly configured.
Object reference not set to an instance of an object.
但是,配置文件确实有.NET 3.5的条目。这是使用NAnt-0.86-beta和Visual C#2008 Express Edition。我完全偏离了轨道吗?如果是这样,是否有人可能有一个可以重复使用的模板构建文件?
谢谢。
答案 0 :(得分:2)
我在一个非常简单的控制台应用程序上尝试了你的构建文件,除了调整命令行参数之外,它对我来说都很好。
您是否尝试重新安装.net framework 3.5,因为它肯定会丢失(如果您尝试使用3.5框架目录中的确切路径从cmd行执行msbuild会发生什么?)
<?xml version="1.0"?>
<project name="HelloWorld" default="build">
<property name="nant.settings.currentframework" value="net-3.5"/>
<target name="build">
<echo>Hello</echo>
<exec program="${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe" commandline="HelloWorld.sln /t:Clean /p:Configuration=Debug /v:q" workingdir="." />
</target>
</project>
我的项目的输出看起来像这样
NAnt 0.86 (Build 0.86.2898.0; beta1; 08/12/2007) Copyright (C) 2001-2007 Gerry Shaw http://nant.sourceforge.net Buildfile: file:///C:/Documents and Settings/krystan/My Documents/Visual Studio 2008/Projects/HelloWorld/test.build Target framework: Microsoft .NET Framework 3.5 Target(s) specified: build build: [echo] Hello [exec] Microsoft (R) Build Engine Version 3.5.30729.1 [exec] [Microsoft .NET Framework, Version 2.0.50727.3082] [exec] Copyright (C) Microsoft Corporation 2007. All rights reserved. [exec] BUILD SUCCEEDED Total time: 0.2 seconds.
答案 1 :(得分:1)
有时这个错误是因为构建服务器没有安装sdk。
尝试安装windows sdk。您可以在Microsoft Download Center
上下载可能需要执行其他步骤才能识别sdk,请参阅此Page Brook's Blog Post
答案 2 :(得分:0)
Nant 0.86中有一个错误,请参阅 http://sourceforge.net/tracker/index.php?func=detail&aid=1986551&group_id=31650&atid=402868 了解更多信息。
你可以下载修复此错误的Nant nightly build(目前nant-0.86-nightly-2009-05-05)。