5

msbuild在 RAD Studio XE4 中的一个项目中遇到了一些奇怪的错误,我正在寻求帮助来诊断发生了什么。我已经遇到这个问题已经有几个星期了,但我自己并没有成功地解决它——是时候更广泛地询问了。症状是:

  • 使用已在 IDE 中构建和运行的项目,msbuild Project.cbproj似乎可以工作
  • 运行msbuild Project.cbproj /t:Clean正常,并且可以很好地删除中间文件。输出的视觉扫描没有显示任何不寻常的文件被删除 - 只是 .obj 文件、链接器状态文件、最终的 EXE 等。
  • 但是在清理或清理结帐后运行msbuild Project.cbproj /t:Build或只是简单地运行失败并显示以下错误消息:msbuild Project.cbproj

Microsoft (R) Build Engine 版本 3.5.30729.5420 [Microsoft .NET Framework,版本 2.0.50727.5472] 版权所有 (C) Microsoft Corporation 2007。保留所有权利。

构建开始于 2013 年 12 月 9 日 10:35:03。节点 0 上的项目“C:\projects\Project.cbproj”(默认目标)。

_PasDepCheck:修改:Source\Common\resample.pas _PasCoreCompile:Embarcadero Delphi for Win32 编译器版本 25.0 版权所有 (c) 1983,2013 Embarcadero Technologies, Inc. C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Bin\ CodeGear.Cpp.Targets(191 1,5): error F1026: File not found: 'True.dpr' Done Building Project "C:\projects\Project.cbproj" (default targets) -- 失败。

构建失败。

"C:\projects\Project.cbproj" (默认目标) (1) -> (_PasCoreCompile 目标) -> C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Bin\CodeGear.Cpp.Targets(1 911,5):错误 F1026:找不到文件:“True.dpr”

0 Warning(s)
1 Error(s)

有些事情让我印象深刻:

  • 它在顶部列出了两个版本的 .Net,一个较旧的版本在方括号中。它可以加载或使用两个框架的一部分吗?
  • True.dpr不存在,我也找不到手动搜索.cbproj文件True.dpr的条目,或者True(在我看来)看起来可能被误解为项目名称的条目。(如果您不熟悉 Delphi,.dpr 文件是一个老式的项目文件 - 它包含入口点。构建一个可能意味着 msbuild 正在某处查找源或项目入口。在我看来,“真”就像 . cbproj 文件被误解或损坏 - 但它是全新的,所以不应该,它在 IDE 中工作。)

有关系统和项目的其他信息:

  • 该项目正在从 RAD Studio 2010 升级。但是,该项目文件是在 XE4中从头开始创建的,即它是全新的,通过在 IDE 中创建一个新项目并添加现有单元(Delphi 和 C++ 文件)。
  • 该项目是一个带有一或两个 Delphi 单元的 C++ 项目。在编译开始时编译 Delphi 单元时,您可以看到它正在倒下。对于那些不熟悉混合 C++ 和 Delphi 的人,通常在混合源项目中,IDE 或 msbuild 将首先编译 Delphi 单元(这样做可以创建/更新 C++ 头文件以与 Delphi 代码交互。)
  • 该项目是一组中的一个,但应该独立编译。
  • 我安装了带有更新 1 的 RAD Studio XE4。
  • msbuild正在从 RAD Studio XE4 命令行启动,即使用rsvars.bat文件设置路径等的命令行。
  • 在上面的输出中,我已将我们的真实项目名称更改为 Project,因为我不想识别它。但是,其余的输出是准确的。

有任何想法吗?我一直在努力解决它很长时间,我很难过。

4

3 回答 3

9

我刚刚在 Delphi XE5 中遇到了同样的错误。运行 MSBUILD 并/v:diag输出 DCC32 的完整命令行,其中true参数中有一个流氓。

以下页面指向了解决方案:http ://wiert.me/2013/11/20/when-the-delphi-xe5-commandline-compiler-fails-with/

在这种情况下,我传递了参数/p:DCC_DebugInformation=true,但这也可能在 .dproj 文件中。更改true2解决问题 - 即

MSBBUILD /p:DCC_DebugInformation=2 project.dproj
于 2013-11-21T03:13:03.713 回答
0

回答我自己的问题,希望对以后的读者有用。

这条评论很关键:

它在顶部列出了两个版本的 .Net,一个较旧的版本在方括号中。它可以加载或使用两个框架的一部分吗?

事实证明,它毕竟不是项目名称。相反,我们编写了一个自定义构建记录器,用于与 RS2010 附带的 msbuild 版本一起使用。它是用不同版本的 .Net 构建的,加载记录器 DLL 似乎会导致 msbuild 内部出现重大问题 - 可以理解,因为我猜这意味着它正在加载两个不同版本的 .Net 运行时。

为什么这个答案可能是错误的:我确实在没有自定义记录器的情况下尝试了命令行(一点一点地修剪我们旧的工作命令行,然后再次工作以找到问题。)那些sans -logger 构建也失败了,这让我有点不解。可能来自 msbuild 崩溃实例的一些中间输出混淆了后续运行,或者 .Net 运行时中的某些内容缓存了 DLL 的使用或不同加载的运行时。我确实知道自定义记录器确实会导致问题,并且删除DLL 本身(这是一切真正开始工作的时候)以及从命令行中删除它来解决问题。

于 2013-11-18T10:22:47.433 回答
0

与@michael-g 的答案类似,仅使用 GUI,可以在此链接中找到:https ://blog.spreendigital.de/2014/03/14/w1030_warning_xe5/

(即转到Delphi调试设置并将“调试信息”更改为现有“True”以外的其他内容。

于 2019-06-13T13:08:54.723 回答