Xamarin 形式;条件编译符号在 MSBUILD 命令行中不起作用
Posted
技术标签:
【中文标题】Xamarin 形式;条件编译符号在 MSBUILD 命令行中不起作用【英文标题】:Xamarin forms; Conditional Compilation Symbol not working from MSBUILD command line 【发布时间】:2021-12-23 14:00:05 【问题描述】:我有一个适用于 ios 和 android 的 Xamarin Forms 项目。该解决方案有四种配置,Test - Debug、Test - Release、Production - Debug、Production - Release。
共享 (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 中专门定义的?任何帮助表示赞赏!
【问题讨论】:
【参考方案1】:原来在 PCL 项目中,我的 DefineConstants 仅限于 AnyCPU 构建;在构建时,Azure Devops 中的 XamariniOS 任务为 /p:Platform=iPhone 构建。为什么在本地调试时常量起作用我不确定,因为本地调试的构建应该是 iPhoneSimulator 而不是 AnyCPU。
【讨论】:
以上是关于Xamarin 形式;条件编译符号在 MSBUILD 命令行中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何将条件编译符号(DefineConstants)传递给 msbuild
您可以从 msbuild.exe 命令行关闭条件编译符号吗?