2015-10-08 43 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;