Автоматизация сборки Delphi и Непрерывная Интеграция выполнимое использование Сборка MS только?

Я надеюсь реализовывать непрерывный модульный тест рабочая система, что-то, что я услышал, назвал "smoketest" или "трутницу", (сервер сборки, который действительно чистит контроль управления версиями и полные системные сборки всего в данном исходном репозитории или проекте), и что-то как "непрерывная интеграция" для малочисленных команд, с Delphi.

Я, ненавидят для согласия на коммерческий "продукт" сервера сборки, и надеюсь, что я могу сделать многое из этого только с поддержкой MSBuild, которая встроена в Дельфи.

Я ищу ресурсы, идеи и место для начала работы. Я не знаю, как использовать Сборку MS с этой целью. У Steve Trevethen есть сообщение в блоге, которое приводит к небольшому обсуждению старой dcc32 сборки командной строки, и некоторые комментарии упоминают сборку мс, которая была здесь начиная с Дельфи 2007. Я использую Delphi 2010. Я ищу руководство и понимание и события, которые скажут мне, действительно ли это - разумный путь для потери работоспособности, и в противном случае какой путь я должен пойти вместо этого?

Я нашел, что можно переопределить Единицу (DCU) и Выходной Каталог EXE из msbuild командной строки с/p:DCU_DcuOutput =. Обратите внимание, что я посмотрел на XML в своих файлах DPROJ, чтобы выяснить, как переопределить материал.

Однако это только делает делание, не сборку, и/t:rebuild не работает (редактирование: да это делает. это хорошо работает на файлах DPROJ, но не на GroupProjects.)

Мне жаль, что не было большего количества документации MSBuild с Delphi там нигде? Справка MSBuild в документации по продукту "рада Studio 2010" показывает одну или две вещи о MSBuild, но является действительно поверхностной и неполной.

Связанные вопросы:

Командные строки MSBuild

22
задан Community 23 May 2017 в 11:48
поделиться

3 ответа

Отвечаю на ваши вопросы: 1) «Как я делаю это задание» необходимо создать новую цель из меню проекта в моем случае я использую две разные цели для игры iPhone (обычная и бесплатная (lite) версия)

  so I created a second Target of Type Application
  this will add a Target to the Groups & Files panel
  and will create a new Info.plist file

  in the Group&File you can show more columns (by right clicking)
  on "Group&Files"), here you have to show the "Target Memebership column"
  for each file you can decide if it is part of a target by pressing the
  corresponding check box

2) «а как же части кодов» Я не знаю, содержит ли текущая бета-версия SDK, используемая для разработки приложений iPad, некоторые # define, которые вы могли бы протестировать во время компиляции в каждом случае можно задать некоторые выделенные # define на целевом уровне и проверить это, чтобы сделать некоторую условную компиляцию

вы можете найти очень подробную информацию о построении приложений с несколькими целями в выделенной документации по яблокам вы можете загрузить его из iPhone Dev Center вы должны прочитать это руководство «Руководство по управлению проектом Xcode»

-121--4378552-

для загрузки титульной страницы в UIWebView можно использовать:

myNavigationBar.title = [myWebView stringByEvaluatingJavaScriptFromString:@"document.title"];

Если вы хотите вернуться назад, это можно сделать:

if ([myWebView canGoBack]){
    [myWebView goBack];
}

Чтобы узнать, загрузил ли пользователь новую страницу, необходимо установить UIWebViewDelegate. Для получения дополнительной информации см. Ссылка на класс UIWebView и Ссылка на протокол UIWebViewDelegate

-121--2607827-

Delphi 2010 использует MSBuild в качестве основного Это означает, что среда IDE и командная строка выполняют одно и то же. Это также означает, что существующие проекты можно легко построить с помощью командной строки. На самом деле, мы в команде Delphi все время делаем эту точную вещь. Вам не нужно беспокоиться о коммутаторах для самого компилятора - файл DProj, созданный IDE, будет

В меню «Пуск» находится командная строка для использования MSBuild с существующим проектом Delphi. Он правильно настраивает среду так, что вы можете просто вызвать:

msbuild myproject.dproj

Вы также можете вызвать определенные конфигурации сборки из командной строки, используя IDE, чтобы легко создать эти конфигурации с помощью параметров командной строки для MSBuild.

Если требуется создать среду самостоятельно, можно запустить пакетный файл rsvars.bat для настройки. Этот файл находится в каталоге\bin и должен быть доступен в командной строке по умолчанию.

Файл содержит следующее:

@SET BDS=<your BDS directory>
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN

Таким образом, если вы хотите создать собственную сборку непрерывной интеграции, вы можете легко управлять построением Delphi с помощью MSBuild.

17
ответ дан 29 November 2019 в 05:13
поделиться

Первое, что нужно понимать, это то, что Erlang был построен, чтобы иметь дело с асинхронной передачей сообщений. Таким образом, единственным способом передачи синхронного сообщения является реализация чего-то сродни подтверждению.

Представьте себе два процесса: P1 и P2. P1 может запустить следующий код:

%% process P1 takes the Pid of P2 as a parameter
%% and a Message to pass on to P2
p1(P2, Message) ->
    P2 ! {self(), Message},
    receive
        {P2, ok}
    after 5000 -> % this section is optional, times out after 5s
        exit("P2 didn't process this!") % this kills P1
    end.

P2, на его стороне может просто выполнить следующее:

p2() ->
    receive
        {From, Message} ->
            io:format("P2 received message ~p~n",[Message]),
            %% processing is done!
            From ! {self(), ok}
    end.

Поэтому вы можете создать p2 как новый процесс. Этот будет сидеть в ожидании любого сообщения. При вызове p1 он отправляет P2 сообщение, которое затем обрабатывает его ( io: format/2 ) и отвечает на P1. Поскольку P1 ждал ответа, в этом процессе не был запущен дополнительный код.

Это основной и единственный способ реализации блокировки вызовов. Предложения по использованию сервера gen _: call примерно реализуют то, что я только что показал. Но это скрыто от программиста.

-121--3250401-

Это просто: используйте

extern const std::string FOO;

в заголовке и

const std::string FOO("foo");

в соответствующем файле .cpp .

-121--1533031-

Файлы dproj и groupproj являются файлами msbuild и в них можно заглянуть. Другие части информации находятся в пути установки msbuild (C :\WINDOWS\Microsoft.NET\Framework\v2.0.50727). Там вы найдете несколько файлов Borland. * .targets.

В сценариях msbuild можно увидеть различные конечные объекты с именем. Например, файл группы содержит целевые объекты Make, Clean и Build, которые можно указать с помощью параметра/t. То же самое касается файлов dproj. Файлы dproj также имеют целевой объект ReBuild. Он делает Clean, а затем Build. Если вы хотите иметь тот же эффект для файла группы, вы можете указать две цели :/t: Clean; Build

Вы также найдете много параметров, которые вы можете задать с/p. Как, например, Конфигурация, чтобы указать конфигурацию, или DCC_Quiet, чтобы дать команду dcc32 прекратить вывод бесполезных пробелов.

Поэтому построение с конфигурацией Release из командной строки:

msbuild mygroup.groupproj /p:Configuration=Release /t:Build

отказ от ответственности: Я просмотрел файлы msbuild Delphi 2007. Более поздние версии Delphi могли изменить имя целевых объектов или параметров. Просто загляните внутрь скриптов msbuild, чтобы узнать, что именно.

11
ответ дан 29 November 2019 в 05:13
поделиться

Я не уверен, что это то, что вам нужно, но у меня есть настройка CruiseControl.NET для непрерывной работы интеграция - и тесты DUnit - для Delphi 2009. CCNET имеет определенный набор задач для MSBuild, и, кроме нескольких проблем с настройкой, у меня он отлично работает.

Я могу сообщить вам, что мне нужно было сделать, чтобы они заработали, если вам нужно.

Марк

4
ответ дан 29 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: