为什么Nant不能与TeamCity一起使用?

7
我已经设置了nant来构建我的ASP.NET MVC项目,本地运行良好。我将nant添加到工具文件夹并加入版本控制,TeamCity检测到我的更改并开始构建,但是失败了。
我相信我正在使用最新版本的Nant,并已将.net framework 3.5添加到nant.exe.config中。在服务器上我缺少什么?是的,.net framework已经安装在服务器上,因为如果我手动构建和部署,asp.net mvc应用程序可以正常工作。
构建文件如下:
<target name="compile" description="Compiles using the AutomatedDebug Configuration">
    <msbuild project="Tolt.Sims.sln" />
</target>

以下是错误信息:

构建失败,无法初始化“Microsoft .NET Framework 2.0”(net-2.0)目标框架。
属性评估失败。表达式:${path::combine(sdkInstallRoot, 'bin')} ^^^^^^^^^^^^^^ 属性'sdkInstallRoot'未设置。
有关构建失败原因的更多信息,请在调试模式下再次运行构建。请尝试使用' nant-help '获取更多信息。
6个回答

4
如果您正在使用NAnt的beta版本(目前这是唯一支持2.0框架以上版本的方式),您可能会遇到注册表问题。Tim Barcz曾经报告过类似的问题。
问题基本上归结为NAntContrib(msbuild任务提供程序)指向了msbuild的2.0版本。请查看他的解决方案,看看是否适用于您的情况。

这是否意味着我需要在构建服务器上安装SDK? - Stefan Moser
我不完全确定你在问什么,但如果你的构建服务器是这个nant进程执行的地方,那么你需要在那里安装.NET 3.5 SDK。 - Scott Saad

4

这也是我遇到的问题。没有安装 .Net 2.0 SDK 导致 sdkInstallRoot 属性未被设置。 - Brett Rigby

3
这个问题在0.86 beta1版本之后得到了解决。如果升级nant是一个选项,那么在2010年4月1日发布的0.90版本中已经修复了该问题。更具体地说,0.90中的修复似乎只是对nant.exe.config文件进行了简单的更改。下面加粗的文本被添加进去,很可能可以解决问题,而无需安装2.0 SDK。

<directory name="${path::combine(sdkInstallRoot, 'bin')}" if="${property::exists('sdkInstallRoot')}" />

更新net-2.0部分以解决该问题。

3
我在注册表中添加了以下内容来解决这个问题:
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework下新建字符串值
命名为sdkInstallRootv2.0
值为C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\
看起来它已经恢复正常了...
w://

1
谢谢,这对我有用(但应该是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework)。 - jpsecher

1

0

我在使用 NAnt 时也遇到了类似的问题。我知道这不是最佳解决方案,但如果您需要让项目继续进行,那么这是行之有效的。

我发现在服务器上安装开发环境(C# Express 对我不起作用,但 VS 2008 可以)可以消除此问题。(是的,我意识到这违反了正常的最佳实践,但它确实起作用,并且让我的脚本运行,以便我可以回到编码中。)

我只是想分享一下,以防其他人遇到类似的情况。(对于 CruiseControl.Net 和 Hudson,这对我都有效。)


1
我在新的CI环境下回到了这个问题。即使安装了较新版本的SDK,直到我显式地安装了2.0 SDK之前,我仍然会遇到此错误。 - Peter Bernier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接