基于生成配置在Xamarin-Visual Studio(VSTS+App Center)中指定项目引用
嘿,这个需求我之前帮不少Xamarin开发者搞定过,用生成配置来按需组合地区项目完全可行,咱们一步步来实现:
第一步:创建地区专属的生成配置
首先得给解决方案添加对应日本(JP)和美国(US)的生成配置,这样后续才能基于配置切换引用:
- 右键你的解决方案,选择「属性」打开配置管理器
- 在「活动解决方案配置」下拉框里选「<新建...>」,复制现有的
Debug配置,命名为Debug-JP,勾选「创建新的项目配置」,点确定 - 重复上面的操作,创建
Release-JP(复制Release)、Debug-US、Release-US四个配置 - 确保每个项目(SupplyApp.Main、iOS、Android、JP/US项目)的配置都对应上,比如
Debug-JP配置下所有项目都设为「生成」状态
第二步:修改主项目的.csproj文件实现条件引用
接下来要让SupplyApp.Main根据当前配置只引用对应地区的项目:
- 右键SupplyApp.Main项目,选择「卸载项目」,然后右键编辑
SupplyApp.Main.csproj - 找到原来的
<ProjectReference>节点,替换成带条件判断的分组:
<!-- 共享的基础引用(如果有的话,保留在这里) --> <ItemGroup> <ProjectReference Include="..\YourSharedProject\YourSharedProject.csproj" /> </ItemGroup> <!-- 仅在JP配置下引用日本项目 --> <ItemGroup Condition=" '$(Configuration)' == 'Debug-JP' Or '$(Configuration)' == 'Release-JP' "> <ProjectReference Include="..\SupplyApp.Japan\SupplyApp.Japan.csproj" /> </ItemGroup> <!-- 仅在US配置下引用美国项目 --> <ItemGroup Condition=" '$(Configuration)' == 'Debug-US' Or '$(Configuration)' == 'Release-US' "> <ProjectReference Include="..\SupplyApp.US\SupplyApp.US.csproj" /> </ItemGroup>
- 保存文件,右键项目选择「重新加载项目」
第三步:同步iOS/Android项目的配置与依赖
因为iOS和Android项目是导航接入Main项目的,要确保它们的配置和Main的地区配置对齐:
- 同样可以编辑iOS/Android项目的.csproj,确保它们对Main项目的引用是基于当前配置的(不过一般配置管理器里同步好的话,这里会自动关联)
- 另外,给iOS/Android项目添加地区专属的编译符号:在项目属性的「生成」标签里,给
Debug-JP和Release-JP添加JP符号,给US配置添加US符号,这样原生项目里也能做地区判断
第四步:代码层面的条件调用
现在在Main项目里,就可以用编译符号来安全调用对应地区的功能了,不会出现跨引用的问题:
// 示例:初始化地区专属服务 #if JP var japanService = new SupplyApp.Japan.LocalPaymentService(); japanService.Initialize(); #elif US var usService = new SupplyApp.US.StripePaymentService(); usService.Setup(); #endif
这样编译时,只有当前配置对应的代码会被包含,完全隔离了另一个地区的功能代码。
额外小技巧
- 把常用的开发配置(比如
Debug-JP)设为默认启动配置,每次打开项目直接开发对应地区的功能 - 如果有本地化资源(比如字符串、图片),也可以用条件嵌入的方式,在.csproj里给资源添加
Condition属性,按需打包 - 发布时,选择对应的
Release-JP或Release-US配置,就能直接打包出对应地区的安装包,不需要手动切换引用
内容的提问来源于stack exchange,提问作者StezPet
相关产品推荐
相关产品推荐

