Я создал собственный .targets
файл MSBuild, который я включил в проект Delphi XE через IDE, и включил его из контекстного меню диспетчера проектов. Хотя файл проверяется, он всегда отключается после повторного сохранения файла проекта.
Вот упрощенная версия файла целей с именем Custom.targets
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Hello">
<Message Text="Hello from custom target"/>
</Target>
</Project>
В качестве отдельного файла это работает как ожидалось: печатать ...
MSBuild Custom.target /t:Hello
... в командной строке выдает ожидаемое сообщение.
При добавлении Custom.targets
в проект Delphi через IDE файл в диспетчере проектов отображает файл, как и ожидалось, и .dproj
теперь файл содержит строку ...
<TargetsFile Include="Custom.targets"/>
Я щелкнул правой кнопкой мыши файл в диспетчере проектов среды IDE и выбрал Enable
. Но когда проект построен, в Build
окне сообщения отображается:
[MSBuild Warning] Custom.targets (1): игнорирование отключенного импорта:
PathToProjectSource\\Custom.targets
Повторное нажатие правой кнопкой мыши в Диспетчере проектов по-прежнему показывает Enable
вариант вместо ожидаемого Disable
.
В командной строке MSBuild ProjectName.dproj /t:Hello
тоже не получается.
Я попытался взломать .dproj
файл, чтобы добавить строку ...
<Import Project="Custom.targets"/>
Печатание MSBuild ProjectName.dproj /t:Hello
теперь работает. Но в следующий раз, когда я сохраню файл проекта из IDE, <Import>
оператор будет удален.
Кто-нибудь есть идеи, что идет не так, пожалуйста?
/t:Hello
а также из IDE с помощью правой кнопки мыши в Диспетчере проектов - Цели - Привет. Я добавилCustom.targets
в проект, щелкнув правой кнопкой мыши в Project Manager - Add - (просматривая файл). Путь находится в том же каталоге, что и файл .dproj.Ответы:
Delphi генерирует весь контент dproj, и этот пользовательский импорт всегда будет удален.
Вы можете написать свои собственные файлы msbuild xml, но dproj принадлежит Delphi.
Если у вас нет исходного кода или вы не хотите исправлять ошибки, вы не можете этого сделать.
Если вам действительно нужен гибкий XML-способ для создания проектов Delphi и создания целей, попробуйте хотеть или хотеть vnext (мой ответвление на bitbucket)
источник
Я бы включил файл целей вручную и собрал его внешне, используя MSBuild, а не из IDE, потому что при компиляции из IDE было бы немного грязно знать, какую конфигурацию и цель вы применили (выбрана ли та, что в проекте? включенная цель - вы не получите никаких визуальных подсказок о том, что пользовательская цель включена).
Я обычно делаю это раньше,
Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"
чтобы они не отображались в IDE (они существуют, но скрыты для разработчиков).Например, мои проекты Delphi XE4 заканчиваются на:
Мой файл .targets определяет пользовательские «PropertyGroup» и «Target» с условием, поэтому они будут применяться только при вызове из MSBuild:
Затем скомпилируйте это с:
Использование этого подхода позволяет настраивать цели сборки, чтобы гарантировать, что каждое приложение получает правильные настройки, не будучи затронутыми изменениями, сделанными кем-либо.
источник