TeamCity:无法在MSBuild项目中检测目标

时间:2010-10-28 08:45:01

标签: msbuild continuous-integration nant teamcity

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

我试图通过指向Rebuild目标的MSBuild / target开关显式设置目标。到目前为止没有运气。

有什么建议吗?提前谢谢。

编辑:

    <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转换,但它仍然是一个有效的项目文件)

EDIT2:

感谢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>

3 个答案:

答案 0 :(得分:4)

您似乎在控制台命令行中使用 / target 开关。请尝试在TeamCity Web UI的构建配置选项中指定所需的目标,如错误消息所示。 Yon可以在TeamCity项目配置的 Runner 选项卡上找到此参数。输入以空格或分号分隔的目标。默认情况下支持构建,重建,清理,发布目标。

答案 1 :(得分:1)

我在VS2017中创建项目时遇到了这个问题。它将项目添加为TooVersion =“15.0”并且没有DefaultTargets属性。我改变了它2015年,因为我的团队城市msbuild选项是2015年。所以两者现在同步

wheel

答案 2 :(得分:0)

您可以确保在项目文件中的DefaultTargets="..."标记上定义<Project>,而不是在命令行或teamcity中指定构建目标。