Переход на новую версию Delphi, в частности с 10.4 на 11.1, может привести к необходимости адаптации существующих скриптов сборки под новые требования. Одной из таких проблем является необходимость корректного указания версии .NET Framework при использовании инструмента msbuild.
Проблема и её описание
При работе с проектами под Android в Delphi 11.1 возникла ошибка при сборке, связанная с не найденным задачей XmlPeek. Это произошло из-за изменения версий инструментов, используемых в процессе сборки. В частности, скрипты сборки, которые ранее работали без проблем, теперь выдавали ошибку, указывающую на отсутствие задачи XmlPeek. Это было связано с тем, что в команде msbuild не была указана версия инструментов.
Предложенное решение
После исследования было найдено решение, заключающееся в добавлении параметра toolsversion в команду msbuild. Это позволило указать версию .NET Framework, которая должна использоваться при сборке проекта. Пример команды:
Однако, было бы предпочтительно не закреплять эту версию в скриптах, а получать её программно, чтобы избежать необходимости обновления скриптов при изменении конфигурации системы.
Автоматическое определение версии toolsversion
Для автоматического определения версии toolsversion, которая используется в Delphi, можно использовать следующий подход:
Запустить rsvars.bat, который устанавливает переменные среды для Delphi.
Программно извлечь версию .NET Framework из установленной директории, используемой rsvars.bat. Например, с помощью следующего кода на Object Pascal:
var
FrameworkDir: string;
ToolsVersion: string;
begin
FrameworkDir := GetEnv('FrameworkDir'); // Получаем директорию .NET Framework
// Извлекаем версию из названия директории
ToolsVersion := Copy(ExtractFileDir(FrameworkDir), 4, 3); // Получаем 'v4.0'
// Дополнительные действия с ToolsVersion...
end;
Использовать полученную версию toolsversion в команде msbuild.
Альтернативное решение
Также было отмечено, что проблема может быть связана с багом в Delphi 11.1, о чём свидетельствуют несколько отчётов в системе контроля качества (RSP-37855, RSP-38466, RSP-38467). В качестве альтернативного решения предлагается добавить параметр /tv:4.0 в команду msbuild или изменить атрибут ToolsVersion в файле проекта .dproj.
Заключение
Автоматическое определение версии toolsversion позволяет обеспечить гибкость и удобство в процессе сборки проектов в Delphi 11.1. Использование программного кода на Object Pascal для извлечения необходимой информации из окружения системы - эффективный способ достижения этой цели.
В контексте обсуждается проблема автоматической настройки версии .NET Framework (toolsversion) для сборки проектов в среде Delphi 11.1, чтобы обеспечить корректную работу скриптов сборки после обновления версии Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS