[英]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類似的方法,但仍然輸出多個空行。
這是一個可能的解決方案:
反匯編Borland.Build.Tasks.Delphi.dll
(位於你的$(BDS)\\bin
目錄中):
ildasm Borland.Build.Tasks.Delphi.dll /out=Borland.Build.Tasks.Delphi.il
編輯Borland.Build.Tasks.Delphi.dcctask.xml
(由上一步創建)並注釋掉OutputParsing
節點的Ignore
子節點。
重新組裝:
ilasm Borland.Build.Tasks.Delphi.il /dll
為它注冊一個強名稱例外:
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.