Delphi XE - 致命:F1027 未找到单元:“System.pas”或二进制等效项 (.dcu)
Posted
技术标签:
【中文标题】Delphi XE - 致命:F1027 未找到单元:“System.pas”或二进制等效项 (.dcu)【英文标题】:Delphi XE - Fatal: F1027 Unit not found: 'System.pas' or binary equivalents (.dcu) 【发布时间】:2015-12-02 14:51:43 【问题描述】:Delphi项目编译过程中,编译器报错如下:
致命:F1027 未找到单元:“System.pas”或二进制等效项 (.dcu)
只有在使用 TFS 构建系统通过 msbuild 构建时才会发生这种情况。
通过如下命令行执行时可以正常工作。
命令:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\msbuild.exe E:\Src\Project\sample.groupproj /v:m /t:Build /p:Config=Release
以下通过 MSbuild 执行失败:
<Exec Command="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\msbuild.exe E:\Src\Project\Sample.groupproj /v:m /t:Build /p:Config=Release"/>
注意:设置了以下环境变量:BDS,BDSLIB,BDSCOMMONDIR,BDSINCLUDE
通过CCNET dcc32.exe执行时有额外的参数如-I,-LE,-LN,-O,-R,-U,-NB,-NH,但通过TFS执行时没有这些参数列表.
关于如何解决这些错误的任何想法。
在此先感谢....
【问题讨论】:
假设您已运行 RSVars.Bat,您还需要确保您的 DCC32 配置定义了正确的路径。 MSBuild 仅启动 DCC32。尝试使用 DCC32 进行命令行构建。完成该工作后,您可以尝试使用 MSBuild。 @Andy_D 是 RSVars.bat 在运行 msbuild exec 任务之前运行。当您启动 cmd 提示符并执行命令时工作正常。该命令封装在msbuild exec任务中并通过TFS构建系统运行时显示错误。 所以你运行一个命令提示符,调用 RSVars.Bat 然后运行 DCC32您的环境可能没有正确配置。在调用 msbuild 之前,首先调用位于 Delphi 安装的 BIN 目录中的 RSVARS.BAT 文件。
如果您从另一个构建系统调用它,我的建议是创建一个简单的批处理/cmd 文件,该文件将调用 RSVARS.BAT,然后执行 MSBUILD 并让您的构建系统调用它。
如果您尝试单独调用 RSVARS.BAT,它将修改其环境副本然后退出,这实际上对父环境没有任何作用。从 MSBUILD 脚本中添加对 RSVARS.BAT 的调用也会因同样的原因而失败。 RSVARS.BAT 必须从与 MSBUILD 任务相同的上下文环境(或更高)中调用。
【讨论】:
通过 exec 任务(在 msbuild 文件中)调用 RSVARS.bat 完成了与您建议的完全相同的步骤,然后编译 delphi 项目。 您可能需要将调用 RSVARS 放在 exec 任务的外部。我相信 exec 任务不会将环境复制到父级,因此变量集将丢失。这就是为什么我建议先使用批处理文件调用 RSVARS,然后调用 MSBUILD 脚本。 @skamardt 我正在执行 rsvars.bat 作为 TFS 预构建脚本执行的一部分,然后执行 msbuild 项目 @Santhosh,它们都需要属于同一个执行上下文。当您单独执行 RSVARS 时,它会更改其环境副本,该副本在完成时将被丢弃。如果将其作为 CALL 添加到批处理文件中,则会修改环境,然后 msbuild 部分可以使用此修改后的环境。如果您在构建脚本中“生成”一个任务来调用 RSVARS,它将无法工作。以上是关于Delphi XE - 致命:F1027 未找到单元:“System.pas”或二进制等效项 (.dcu)的主要内容,如果未能解决你的问题,请参考以下文章
Android问题-XE5提示"[DCC Fatal Error] Project1.dpr: F1027 Unit not found: 'System.pas' o