MSBuild在Cpp.Targets中使用新的XE4项目搜索' True.dpr'失败

时间:2013-09-12 02:27:01

标签: msbuild c++builder delphi-xe4 c++builder-xe4

我在RAD Studio XE4中遇到一些奇怪的msbuild错误,我正在寻求帮助来诊断正在发生的事情。我已经遇到这个问题已经有好几个星期了,但是我自己也没有成功解决这个问题 - 时间问得更广泛了。症状是:

  • 使用已在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,Version 2.0.50727.5472]版权所有(C)Microsoft Corporation   2007.保留所有权利。

     

Build build 12/09/2013 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   文件(x86)\ Embarcadero \ RAD Studio \ 11.0 \ Bin \ CodeGear.Cpp.Targets(191   1,5):错误F1026:找不到文件:'True.dpr'完成建筑项目   “C:\ projects \ Project.cbproj”(默认目标) - FAILED。

     

构建失败。

     

“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.dprTrue条目(对我而言)喜欢它可能被误解为项目名称。 (如果您不熟悉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,因为我不想识别它。但是,输出的其余部分是准确的。

有什么想法吗?我一直在努力解决它,并且很难过。

3 个答案:

答案 0 :(得分:8)

我在Delphi XE5中遇到了同样的错误。使用/v:diag运行MSBUILD将输出DCC32的完整命令行,其中参数中包含流氓true

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

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

MSBBUILD /p:DCC_DebugInformation=2 project.dproj

答案 1 :(得分:0)

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

这个评论很关键:

  

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

毕竟不是项目名称。相反,我们编写了一个自定义构建记录器,用于RS2010附带的msbuild版本。它是用.Net的不同版本构建的,并且加载记录器DLL似乎在msbuild中引起了主要问题 - 可以理解,因为我猜它意味着它正在加载两个不同版本的.Net运行时。

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

答案 2 :(得分:0)

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

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