我认为TeamCity MSBuild替代方案存在一些问题。
我尝试使用MSBuild任务(NAnt Contrib)在NAnt中编译Delphi 2010项目(符合MSBuild标准)。
如果我在控制台上不使用TeamCity,一切都很顺利。
但是,如果我尝试使用TeamCity,就会收到以下错误消息:
Failed to detect default target(s) in the project file F:\CI\TeamCity\TeamCity\buildAgent\work\892195dab42324a3\build\src.temp\TestProject\Test.dproj. Please define targets explicitly in the build configuration options on TeamCity Web UI. Project does not define DefaultTargets or InitialTargets.
我尝试通过使用MSBuild /target开关来显式设置目标,指向Rebuild目标。到目前为止还没有成功。
有任何建议吗?提前感谢。
编辑:
<foreach item="File" property="iterator.dproj">
<in>
<items>
<include name="${src.temp}\**\*.dproj" />
</items>
</in>
<do>
<msbuild project="${iterator.dproj}">
<arg value="/target:Rebuild" />
</msbuild>
</do>
</foreach>
*.dproj文件是标准的Delphi 2010项目文件(虽然经过了XSL转换,但仍然是有效的项目文件)
编辑2:
感谢s.ermakovich的帮助,我用直接调用NAnt代替了msbuild任务(来自NAnt contrib),这样在TeamCity服务器上就不会产生错误了。看起来TeamCity只会替换对NAnt contrib msbuild任务的调用。:-)
<property name="msbuild.exe" value="${framework::get-framework-directory(nant.settings.currentframework)}\msbuild.exe" />
<foreach item="File" property="iterator.dproj">
<in>
<items>
<include name="${src.temp}\**\*.dproj" />
</items>
</in>
<do>
<exec program="${msbuild.exe}">
<arg path="${iterator.dproj}" />
</exec>
</do>
</foreach>