2015-10-08 5 views
2

Мой продукт переносится с Delphi 6 на новый Delphi XE3. Delphi 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 = Построить все единицы). Я попробовал аналогичный подход с MSBuild, добавив/p: DCC_AdditionalSwitches = -B, но все же он выводит несколько пустых строк.

+0

Прочитать информацию из файла карты –

+0

Отладочные карты содержат только имена файлов, а не полные или относительные пути. Есть ли способ выводить пути отладки на основе идентификаторов маршрутов? Путь необходим для нашего программного обеспечения. – 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, создание ваших проектов Delphi с MSBuild должно теперь показать deta iled компилятор.

1

Добавить --depends в командной строке dcc32 или /р: 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.Вы можете скрыть эти пустые строки msbuild с помощью /p: DCC_Hints = false;