MSBuild在Cpp中失败。目标搜索';正确。dpr';,使用新的XE4项目

MSBuild在Cpp中失败。目标搜索';正确。dpr';,使用新的XE4项目,msbuild,c++builder,delphi-xe4,c++builder-xe4,Msbuild,C++builder,Delphi Xe4,C++builder Xe4,我在RAD Studio XE4中的一个项目中遇到了一些奇怪的msbuild错误,我正在寻求帮助以诊断发生了什么。我已经遇到这个问题好几个星期了,但我自己还没有成功地解决它——是时候更广泛地问了。病征包括: 对于从IDE中生成并运行的项目,msbuild project.cbproj似乎可以工作 运行msbuild Project.cbproj/t:Clean可以正常工作并删除中间文件。对输出的视觉扫描不会显示任何被删除的异常文件-仅显示.obj文件、链接器状态文件、最终EXE文件等 但是在清

我在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)生成引擎版本3.5.30729.5420[Microsoft.NET 框架,版本2.0.50727.5472]版权所有(C)微软公司 2007版权所有

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

_PasDepCheck:已修改:Source\Common\resample.pas _PascoreComile:Embarcadero Delphi for Win32编译器版本25.0版权所有(c)19832013 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”(默认目标)--失败

生成失败

“C:\projects\Project.cbproj”(默认目标)(1)->(_PasCoreCompile 目标)->C:\ProgramFiles(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在某处找到了一个源或项目入口。“True”在我看来似乎是.cbproj文件被误解或损坏了-但它是全新的,因此不应该是,并且它在IDE中工作。)
有关系统和项目的其他信息:

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

有什么想法吗?多年来,我一直在试图解决这个问题,但我被难住了。

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

这一评论非常关键:

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

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


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

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

下一页指出了解决方案:

在本例中,我传递了参数
/p:DCC_DebugInformation=true
,但也可能在.dproj文件中。将
true
更改为
2
修复了问题-即

MSBBUILD /p:DCC_DebugInformation=2 project.dproj

与@michael-g类似的答案(仅使用GUI)可在以下链接中找到:

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