【问题标题】:Blank lines instead of a task console output in MSBuildMSBuild 中的空行而不是任务控制台输出
【发布时间】:2016-01-05 23:38:54
【问题描述】:

我的产品正在从 Delphi 6 迁移到较新的 Delphi XE3。 Delphi 6 编译器用于输出已编译为可执行文件的文件列表:

Borland Delphi Version 14.0
Copyright (c) 1983,2002 Borland Software Corporation

ProjectName.dpr(X) 
...
PathToSomeUnit.pas(X) 
...
PathToSomeIncludedFile.inc(X)     
...
X lines, X.XX seconds, X bytes code, X bytes data.

其中“X”表示一些数字

我们有一个内部软件,用于分析应用程序和特定文件(单元和包含文件)之间的依赖关系。该软件使用 dcc32 控制台输出(如上图)作为其输入。

在新的 Delphi XE3 中,我们不再直接调用 dcc32,而是使用 MSBuild。不幸的是,控制台输出与 Delphi 6 不同。当禁用“安静编译”选项时,控制台输出有多个空行代替已编译文件列表。

Embarcadero Delphi for Win32 compiler version 24.0
Copyright (c) 1983,2012 Embarcadero Technologies, Inc.

[multiple blank lines]

X lines, X.X seconds, X bytes code, X bytes data. (TaskId:65) 

使用 /verbosity:diagnostic 参数如下所示

Embarcadero Delphi for Win32 compiler version 24.0 (TaskId:65)
Copyright (c) 1983,2012 Embarcadero Technologies, Inc. (TaskId:65)
(TaskId:65)
(TaskId:65)
(TaskId:65)
(TaskId:65)
(TaskId:65)
(TaskId:65)
...
X lines, X.X seconds, X bytes code, X bytes data. (TaskId:65)

当直接调用 dcc32 时,也有类似的问题,但使用“-B”编译器开关(-B = 构建所有单元)解决了。 我通过添加 /p:DCC_AdditionalSwitches=-B 尝试了与 MSBuild 类似的方法,但它仍然输出多个空行。

【问题讨论】:

  • 从地图文件中读取信息
  • 调试映射仅包含文件名,不包含完整路径或相对路径。有没有办法输出路径 id 调试映射?我们的软件需要该路径。

标签: delphi msbuild delphi-xe3 dcc32


【解决方案1】:

--depends 添加到 DCC32 命令行或 /p:DCC_OutputDependencies=true 到msbuild,它会输出一个易于解析的.d文件,如下例:

C:\publico\BUILD\temp\YourDPR.exe: YourDPR.dpr \
        C:\blabla blabla\FrameWork\Base\biblioteca\dcus\unit15.dcu \
        C:\blabla blabla\FrameWork\Base\biblioteca\dcus\unit13.dcu \
        C:\bla bla\bla\LIBD5\Units\unit12.dcu \
        C:\blabla blabla\FrameWork\Base\biblioteca\rxlib\units\unit1.dcu \
        C:\blabla blabla\FrameWork\Base\biblioteca\rxlib\units\unit13.dcu \
        C:\bla bla\bla\LIBD5\Units\unit1.dcu \
        C:\bla bla\bla\LIBD5\Units\unit12.dcu \

附言。您可以使用 /p:DCC_Hints=false;

隐藏那些空白的 msbuild 行

【讨论】:

    【解决方案2】:

    这是一个可能的解决方案:

    1. 备份您的文件等
    2. 打开 .NET Framework SDK v2.0 命令提示符。
    3. 反汇编Borland.Build.Tasks.Delphi.dll(位于你的$(BDS)\bin目录下):

      ildasm Borland.Build.Tasks.Delphi.dll /out=Borland.Build.Tasks.Delphi.il

    4. 编辑Borland.Build.Tasks.Delphi.dcctask.xml(由上一步创建)并注释掉OutputParsing节点的Ignore子节点。

    5. 重新组装:

      ilasm Borland.Build.Tasks.Delphi.il /dll

    6. 为其注册一个强名称异常:

      sn -Vr Borland.Build.Tasks.Delphi.dll

    如果您按照this answer 中的说明关闭了安静模式,那么现在使用 MSBuild 构建您的 Delphi 项目应该会显示详细的编译器输出。

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      相关资源
      最近更新 更多