簡體   English   中英

空行而不是MSBuild中的任務控制台輸出

[英]Blank lines instead of a task console output in MSBuild

我的產品正在從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不同。當禁用“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) 

使用/ 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 = Build all units)解決了這個問題。 我通過添加/ p:DCC_AdditionalSwitches = -B嘗試了與MSBuild類似的方法,但仍然輸出多個空行。

這是一個可能的解決方案:

  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項目現在應該顯示詳細的編譯器輸出。

添加到--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 \

PS。 你可以用/ p隱藏那些空白的msbuild行:DCC_Hints = false;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM