【问题标题】:Automate Delphi 2010 project build with MSBuild使用 MSBuild 自动构建 Delphi 2010 项目
【发布时间】:2012-03-09 04:36:53
【问题描述】:

我正在寻找使用 MSBuild 编译我的 Delphi 2010 项目,但有些不对劲,我无法让 MSBuild 编译我的项目。

我试过这个命令行:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\MyProject\Myapp.dproj" /t:Release

还有这个:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\MyProject\Myapp.dproj" /p:Configuration=Release /t:Release

但 MSBuild 无法识别我的构建配置!

我也更改了 [ rsvars.bat ] 但没有用!

@SET BDS=C:\Program Files (x86)\Embarcadero\RAD Studio\7.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v4.0.30319
@SET FrameworkVersion=v4.0.30319
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN

MSBuild 错误是:

C:\MyProject\Myapp.dproj : error MSB4057: The target "Release" does
not exist in the project.

如果能帮助我使用 MSBuild 构建我的应用程序,我们将不胜感激。

(是的,我完全了解 FinalBuilder 之类的工具,我只是想学习如何使用 MSBuild 来做到这一点)

谢谢!

【问题讨论】:

  • 谢谢,好的(1)我改回rsvars.bat(但仍然无法编译:(),(2)没有完整路径,DOS无法识别msbuild。
  • 如果在运行 msbuild 之前运行 rsvars.bat 文件,Windows 控制台(作为旁注与 DOS 不同)会将对“msbuild.exe”的普通调用识别为 rsvars。 bat 修改 PATH 变量(见第 6 行)。您还可以永久编辑环境变量 - 这样您就不必每次都运行 rsvars.bat。
  • 2.如果您在调用 msbuild 之前运行 rsvars.bat,它肯定会识别 msbuild。阅读文档。他们解释了这一切。
  • 噢!是的,我现在明白了,我运行了 rsvars.bat(别笑!我之前双击过它!),现在 Chris 的线路工作了!
  • 你需要删除伪造文件C:\Users\Admin\msbuild.exe

标签: delphi command-line msbuild compilation


【解决方案1】:

您需要切换参数。目标参数 (/t) 告诉 MSBuild 要创建哪个目标。 这可以是“Make”、“Clean”或“Build”(或它们的组合——在这种情况下用“;”分隔它们)。

属性参数 (/p) 将属性转发给实际的编译器。例如,您可以使用/p:config= 指定配置

因此,如果您想清理然后使用发布配置构建项目,请像这样指定参数:

msbuild.exe "/t:Clean;Build" "/p:config=Release" Myapp.dproj

【讨论】:

  • 谢谢你,克里斯,但现在我明白了:
  • Microsoft (R) Build Engine 版本 4.0.30319.1 [Microsoft .NET Framework,版本 4.0.30319.1] 构建于 2012 年 2 月 17 日晚上 20:37:11 开始。节点 1 上的项目“D:_Software\test.dproj”(清洁;构建目标)。 D:_Software\test.dproj:错误 MSB4057:项目中不存在目标“Clean”。完成构建项目“D:_Software\test.dproj”(清理;构建目标)——失败。构建失败。 “D:_Software\test.dproj”(清洁;构建目标)(1)-> D:_Software\test.dproj:错误 MSB4057:项目中不存在目标“清洁”。 0 警告 1 错误
  • @David Heffernan 我正在使用 powershell,它用分号分隔命令。这使得有必要在它们周围加上引号。不过标准控制台不需要这个
  • @chris 替代方法是使用 /t 两次 (/t:clean /t:build) 或使用反勾号来转义 ; (/clean`;build)
【解决方案2】:

/p:Configuration=Release 更改为/p:config=Release

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多