MSBuild中出现任务控制台输出为空白行的情况

3

我的产品正在从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,但仍然输出多个空行。


从地图文件中读取信息。 - David Heffernan
调试映射仅包含文件名,而不是完整或相对路径。是否有一种方法可以在调试映射中输出路径?路径对于我们的软件是必需的。 - Bartek
2个回答

3
以下是可能的解决方案:
  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

如果按照这个答案所述关闭了安静模式,则使用MSBuild构建Delphi项目应该现在显示详细的编译器输出。

2

在 DCC32 命令行中添加 --depends 或者在 msbuild 中添加 /p:DCC_OutputDependencies=true,它将会输出一个可以轻易解析的.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行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接