我有一個適用于 iOS 和 Android 的 Xamarin Forms 專案。該解決方案有四種配置,測驗-除錯、測驗-發布、生產-除錯、生產-發布。
共享 (PCL) 專案具有用于兩個測驗配置的條件編譯符號 TEST。生產配置和 PROD 相同

當我通過除錯器從 Visual Studio 執行時,發生在 PCL 的啟動函式 (App.cs) 中的條件編譯在所有四種配置中都按預期作業:
#if TEST
CurrentAppFlavor = Flavor.Test;
#else
CurrentAppFlavor = Flavor.Production;
#endif
然而; 當我通過 Azure Devops Pipelines 構建同一個專案時,盡管在 msbuild 中選擇了正確的構建配置(并且日志證明了這一點),打包的構建仍然執行,就好像條件編譯符號不存在一樣(因此默認為生產。)
inputs:
projectFile: '**/*droid*.csproj'
outputDirectory: '$(outputDirectory)'
configuration: '$(buildConfiguration)'
msbuildVersionOption: '16.0'
msbuildArguments: |
/t:SignAndroidPackage /p:AndroidKeyStore="True" ... (additional signing vars)
我已經確認選擇了正確的構建配置(主要是因為無效配置顯示為錯誤)但生成的二進制檔案沒有按預期運行。通過命令列構建,我能想到的唯一不同之處是我們正在構建一個特定的專案,而不是在解決方案中。但也許我使用的是錯誤的條件編譯符號?我是否需要在命令列上指定編譯符號,即使它們是在 csproj 中專門定義的?任何幫助表示贊賞!
uj5u.com熱心網友回復:
原來在 PCL 專案中,我的 DefineConstants 僅限于 AnyCPU 構建;在構建時,Azure Devops 中的 XamariniOS 任務為 /p:Platform=iPhone 構建。為什么在本地除錯時常量有效我不確定,因為本地的構建除錯應該是 iPhoneSimulator 而不是 AnyCPU。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361147.html
標籤:安卓 ios 沙马林 xamarin.forms azure-devops
上一篇:快取沒有被FFimage清除
