2015-10-08 45 views
2

我的产品正在从Delphi 6迁移到较新的Delphi XE3。习惯了被编译成可执行文件的输出列表德尔福6编译:空行代替MSBuild中的任务控制台输出

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不一样。当“Quiet compile”选项被禁用时,控制台输出有多条空行代替编译文件列表。

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) 

随着/冗长:它看起来如下

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,但它仍然输出多个空行。

+0

从地图文件中读取信息 –

+0

调试图只包含文件名,不包含完整路径或相对路径。有没有办法输出路径ID调试映射?我们的软件需要该路径。 – Bartek

回答

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(由上一步中创建),并注释掉Ignore子节点OutputParsing节点。

  5. 再组装起来:

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

  6. 注册一个强名称例外是:

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

this answer描述如果你关闭了安静模式,使用MSBuild构建您的Delphi项目现在应该显示这个附件编译器输出。

1

添加--depends到DCC32命令行或/P:DCC_OutputDependencies =真 到的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 \ 

Ps。你可以用/p隐藏那些空msbuild行:DCC_Hints = false;