Blank lines instead of a task console output in MSBuild

My product is being migrated from Delphi 6 to the newer Delphi XE3. The Delphi 6 compiler used to output list of files that were compiled to an executable:

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.

where "X" mean some numbers

We have an internal software for analyzing dependencies between applications and particular files - units and included files. This software uses the dcc32 console output (like this one above) as its input.

With the new Delphi XE3 we no longer call dcc32 directly, but we use MSBuild. Unfortunately, the console output is not the same as with Delphi 6. When the "Quiet compile" option is disabled, the console output has multiple blank lines in place of the compiled file list.

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) 

With the /verbosity:diagnostic parameter it looks as follows

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)

When calling dcc32 directly, there was a similar problem, but it was resolved with the "-B" compiler switch (-B = Build all units). I tried a similar approach with MSBuild by adding /p:DCC_AdditionalSwitches=-B but still it outputs multiple blank lines.


Here's a possible solution:

  • Back up your files, etc.
  • Open a .NET Framework SDK v2.0 command prompt.
  • Disassemble Borland.Build.Tasks.Delphi.dll (located in your $(BDS)bin directory):

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

  • Edit Borland.Build.Tasks.Delphi.dcctask.xml (created by the previous step) and comment out the Ignore subnode of the OutputParsing node.

  • Reassemble it:

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

  • Register a strong name exception for it:

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

  • If you turned off the quiet mode as described in this answer, building your Delphi projects with MSBuild should now show the detailed compiler output.


    Add --depends to DCC32 command line or /p:DCC_OutputDependencies=true to msbuild, it will output a .d file that can be easily parsed, like the example below:

    C:publicoBUILDtempYourDPR.exe: YourDPR.dpr 
            C:blabla blablaFrameWorkBasebibliotecadcusunit15.dcu 
            C:blabla blablaFrameWorkBasebibliotecadcusunit13.dcu 
            C:bla blablaLIBD5Unitsunit12.dcu 
            C:blabla blablaFrameWorkBasebibliotecarxlibunitsunit1.dcu 
            C:blabla blablaFrameWorkBasebibliotecarxlibunitsunit13.dcu 
            C:bla blablaLIBD5Unitsunit1.dcu 
            C:bla blablaLIBD5Unitsunit12.dcu 
    

    Ps. You can hide those blank msbuild lines with /p:DCC_Hints=false;

    链接地址: http://www.djcxy.com/p/67678.html

    上一篇: 停止IDE自动添加使用单位

    下一篇: 空行而不是MSBuild中的任务控制台输出