【问题标题】:TeamCity: Failed to detect target in MSBuild projectTeamCity:无法在 MSBuild 项目中检测到目标
【发布时间】:2011-05-01 18:26:05
【问题描述】:

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

编辑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 脚本?

标签: msbuild continuous-integration nant teamcity


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 正如我在问题中提到的,TeamCity 调用了一个带有嵌入式 msbuild 命令的 NAnt 脚本。在控制台中一切正常,但 TeamCity 报告错误。
      • 您通过控制台究竟执行了什么? MSBuild.exe?您能否提供一个示例,您如何在 NAnt 脚本中使用 MSBuild 任务?
      • 当然,看看我最初的问题 :-)
      • 您可以尝试将 任务替换为指向 msbuild.exe 的 任务。这是我唯一想到的。
      • 用 exec 任务替换 msbuild 任务确实有效。伟大的!谢谢!
      猜你喜欢
      • 2020-09-06
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多