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。
我有一个用于 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。