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 它编译正确吗?您可能需要在项目级别(即在您的 DProj 文件中)显式设置您的库路径。 @Andy_D 当我运行 DCC32 时,我得到一个新的错误,E2032 Illegal character in input file: ' " ' @Andy dcc32 失败,因为询问者传递了 XML dproj 文件。为 dcc32 获取正确的参数是一项艰巨的工作。而 msbuild 做到了。建议 dcc32 具有极大的误导性。 【参考方案1】:

您的环境可能没有正确配置。在调用 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

DELPHI XE8 远程调试

Delphi XE8 TStyleBook的使用

delphi问题

使用 Delphi XE2 的 AnimateWindow

delphi xe 之路(14)使用FireMonkeyStyle(一共30篇)