C# VSTS Xamarin.iOS构建任务使用/p:DefineConstants定义多个常量

C# VSTS Xamarin.iOS构建任务使用/p:DefineConstants定义多个常量,c#,xamarin,msbuild,azure-devops,conditional-compilation,C#,Xamarin,Msbuild,Azure Devops,Conditional Compilation,我正在使用VSTS中的Xamarin.iOS构建任务来构建我的解决方案。 我想定义常量启用分析和环境开发 不幸的是,我不知道在参数输入字段中输入什么才能让它成功运行。我正在使用托管的macOS预览版build代理和msbuild(Visual Studio for Mac)build工具 我试过: /p:DefineConstants=启用分析;环境开发 MSBUILD:错误MSB1006:属性无效 交换机:ENV_DEV /p:DefineConstants=“启用分析;环境开发” MSBUI

我正在使用VSTS中的Xamarin.iOS构建任务来构建我的解决方案。 我想定义常量
启用分析
环境开发

不幸的是,我不知道在
参数
输入字段中输入什么才能让它成功运行。我正在使用托管的macOS预览版build代理和msbuild(Visual Studio for Mac)build工具

我试过:

/p:DefineConstants=启用分析;环境开发

MSBUILD:错误MSB1006:属性无效

交换机:ENV_DEV

/p:DefineConstants=“启用分析;环境开发”

MSBUILD:错误MSB1006:属性无效

交换机:ENV_DEV

/p:DefineConstants='ENABLE\u分析;环境开发人员

MSBUILD:错误MSB1006:属性无效

开关:ENV_DEV'

/p:DefineConstants=”“启用\u分析;环境开发“

MSBUILD:错误MSB1006:属性无效

交换机:ENV_DEV

”/p:DefineConstants=“”启用\u分析;环境开发“

MSBUILD:错误MSB1008:只能指定一个项目

开关:'/p:DefineConstants=ENABLE_ANALYTICS;ENV_DEV'


我认为你需要避开分号:


/p:DefineConstants=ENABLE_ANALYTICS\;ENV_DEV

我认为您需要避开分号:


/p:DefineConstants=ENABLE_ANALYTICS\;ENV_DEV

我遇到了一个类似的问题,我通过添加两次常量解决了这个问题

/p:DefineConstants=ENABLE_ANALYTICS /p:DefineConstants=ENV_DEV

我遇到了一个类似的问题,我通过两次添加常量来解决它

/p:DefineConstants=ENABLE_ANALYTICS /p:DefineConstants=ENV_DEV

问题的根本原因是构建脚本删除了所有双引号,除非它们被转义。转义算法似乎不是很简单

for(变量i=0;i0){
args.push(arg);
arg='';
}
继续;
}
附加(c);
}
因此,要在结果字符串中保留双引号,应如下所示:

/p:DefineConstants="\"A;B\"
将其用于
xamarinos
任务时:

-任务:XamariniOS@2
投入:
...
参数:'/p:DefineConstants=“\”A;B\“'
作为奖励,这里有一个管道脚本示例,允许您通过“运行管道”UI选择要包含的常量

参数:
-名称:启用调试错误消息
displayName:“启用调试错误消息”
类型:布尔型
默认值:true
-名称:启用模拟API选项
displayName:“启用模拟API选项”
类型:布尔型
默认值:true
触发:
-发展
变量:
-${{参数中的每个p}}:
-名称:“定义常量${{p.key}”
值:${p.value}
游泳池:
vmImage:“macos最新版本”
步骤:
-pwsh:|
$constantVars=Get-ChildItem-Path-Env:\\\其中对象名-如“DEFINECONSTANT\u ENABLE”
$constantList=“/p:DefineConstants=`\`”
$constantVars | ForEach对象{
if($\ 0.Value-等式'True'){
$constantList+=“$($.Name.Replace('DEFINECONSTANT',”);”
}
}
$constantList+=“\`”
写入主机$constantList
echo“##vso[task.setvariable=define]$constantList”
-bash:echo“我的管道变量是$(define)”
-任务:XamariniOS@2
投入:
解决方案文件:“您的解决方案。sln”
配置:“发布”
packageApp:false
buildForSimulator:正确
runNugetRestore:false
参数:“$(定义)”

另外,感谢@WaitingForGuacamole在中帮助编写上述脚本。

问题的根本原因是构建脚本删除了所有双引号,除非它们被转义。逃逸算法似乎并不简单

for(变量i=0;i0){
args.push(arg);
arg='';
}
继续;
}
附加(c);
}
因此,要在结果字符串中保留双引号,应如下所示:

/p:DefineConstants="\"A;B\"
将其用于
xamarinos
任务时:

-任务:XamariniOS@2
投入:
...
参数:'/p:DefineConstants=“\”A;B\“'
作为奖励,这里有一个管道脚本示例,允许您通过“运行管道”UI选择要包含的常量

参数:
-名称:启用调试错误消息
displayName:“启用调试错误消息”
类型:布尔型
默认值:true
-名称:启用模拟API选项
displayName:“启用模拟API选项”
类型:布尔型
默认值:true
触发:
-发展
变量:
-${{参数中的每个p}}:
-名称:“定义常量${{p.key}”
值:${p.value}
游泳池:
vmImage:“macos最新版本”
步骤:
-pwsh:|
$constantVars=Get-ChildItem-Path-Env:\\\其中对象名-如“DEFINECONSTANT\u ENABLE”
$constantList=“/p:DefineConstants=`\`”
$constantVars | ForEach对象{
if($\ 0.Value-等式'True'){
$constantList+=“$($.Name.Replace('DEFINECONSTANT',”);”
}
}
$constantList+=“\`”
写入主机$constantList
echo“##vso[task.setvariable=define]$constantList”
-巴什:回声