Формы Xamarin; Символ условной компиляции не работает из командной строки MSBUILD

#android #ios #xamarin #xamarin.forms #azure-devops

Вопрос:

У меня есть проект Xamarin Forms для iOS и Android. Решение имеет четыре конфигурации: Тест — Отладка, Тест — Выпуск, Производство — Отладка, Производство — Выпуск.

Проект shared (PCL) имеет условный символ компиляции для двух конфигураций тестов, TEST. То же самое для производственных конфигураций и продуктов

введите описание изображения здесь

Когда я выполняю из Visual Studio через отладчик, условная компиляция, которая выполняется в функции запуска PCL (App.cs), работает должным образом во всех четырех конфигурациях:

 #if TEST  CurrentAppFlavor = Flavor.Test; #else  CurrentAppFlavor = Flavor.Production; #endif  

Однако; Когда я создаю этот же проект с помощью конвейеров Azure Devops, несмотря на выбор правильной конфигурации сборки в msbuild (и журналы подтверждают это), упакованные сборки выполняются так, как будто символ условной компиляции не существует (и, следовательно, по умолчанию используется для производства).

 inputs:  projectFile: '**/*droid*.csproj'  outputDirectory: '$(outputDirectory)'  configuration: '$(buildConfiguration)'  msbuildVersionOption: '16.0'  msbuildArguments: |  /t:SignAndroidPackage /p:AndroidKeyStore="True" ... (additional signing vars)  

Я подтвердил, что выбрана правильная конфигурация сборки (в основном потому, что недопустимые конфигурации отображаются как ошибка), но результирующие двоичные файлы ведут себя не так, как ожидалось. Единственное, что я могу придумать, что отличается от построения с помощью командной строки, — это то, что мы создаем конкретный проект, а не решение. Но, возможно, я неправильно использую символы условной компиляции? нужно ли указывать символы компиляции в командной строке, даже если они определены в csproj специально? Любая помощь будет признательна!

Ответ №1:

Оказывается, в проекте PCL мои параметры определения были ограничены сборками AnyCPU; и во время сборки задача XamariniOS в Azure Devops строится для /p:Платформа=iPhone. Почему константа работала при локальной отладке, я не уверен, потому что локальная отладка сборки должна была быть iPhoneSimulator, а не AnyCPU.