Xamarin 形式;条件编译符号在 MSBUILD 命令行中不起作用

Xamarin forms; Conditional Compilation Symbol not working from MSBUILD command line

我有一个用于 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 中专门定义的?感谢您的帮助!

事实证明,在 PCL 项目中,我的 DefineConstants 仅限于 AnyCPU 构建;在构建时,Azure Devops 中的 XamariniOS 任务为 /p:Platform=iPhone 构建。为什么常量在本地调试时有效我不确定,因为本地构建调试应该是 iPhoneSimulator 而不是 AnyCPU。