TeamCity:在MSBuild项目中未能检测到目标。

7

我认为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>

你尝试在TeamCity的构建代理目录中运行NAnt脚本了吗? - Philipp
3个回答

6

看起来你在控制台命令行中使用了/target开关。请尝试在TeamCity Web UI的构建配置选项中指定你需要的目标,就像错误信息所建议的那样。你可以在TeamCity项目配置的Runner选项卡中找到此参数。输入以空格或分号分隔的目标。默认支持Build、Rebuild、Clean和Publish目标。


正如我在问题中提到的那样,TeamCity调用一个包含msbuild命令的NAnt脚本。在控制台中一切都正常,但是TeamCity报告了一个错误。 - Dennis
你在控制台上执行的是什么?MSBuild.exe吗?你能提供一个例子,说明如何在NAnt脚本中使用MSBuild任务吗? - s.ermakovich
1
当然,看看我的最初问题就可以了 :-) - Dennis
你可以尝试使用<exec>任务替换<msbuild>任务,指向msbuild.exe。这是我能想到的唯一方法。 - s.ermakovich
将msbuild任务替换为exec任务确实有效。太好了!谢谢! - Dennis

1

在使用VS2017创建项目时,我遇到了这个问题。它将项目添加为TooVersion="15.0",并且没有DefaultTargets属性。由于我的团队城市的msbuild选项是2015,所以我将其更改为2015。现在两者都同步了。

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

0

与其在命令行或TeamCity中指定构建目标,不如确保在项目文件的<Project>标记中定义了DefaultTargets="..."


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