C#解决方案如何按条件包含排除项目?Xamarin多平台AppCenter构建问题
问题解答
完全可以通过配置实现指定项目的按需包含/排除,以下是两种可落地的实现方案:
方案1:基于解决方案配置的生成开关(无侵入,兼容性最强)
这是你当前临时方案的标准化版本,无需修改解决方案底层代码,适配所有Visual Studio版本和AppCenter构建规则:
- 右键解决方案资源管理器中的根解决方案节点,选择「属性」→ 进入「配置属性」→「配置」页面
- 点击「配置管理器」,新建专属构建配置,例如命名为
AppCenter_Android、AppCenter_iOS - 针对每个专属配置,在「生成」列仅勾选对应需要构建的平台项目,取消UWP项目的生成勾选,同时确认对应平台的架构参数匹配(Android选择对应ABI架构、iOS选择
iPhone/iPhoneSimulator) - 保存配置后,在AppCenter的构建设置中指定对应构建任务使用的配置名称即可。
方案2:解决方案文件内置条件逻辑(更灵活,适合复杂场景)
Visual Studio 2019及以上版本支持在.sln文件中直接添加Condition条件属性,控制项目的加载和生成规则:
- 用文本编辑器打开你的
.sln文件,找到UWP项目对应的Project定义段,默认格式如下:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "你的UWP项目名", "你的UWP项目路径\项目名.csproj", "{项目唯一GUID}" EndProject
- 给Project节点添加条件判断即可实现按需加载,例如仅当构建配置包含
UWP关键词时才加载该项目:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "你的UWP项目名", "你的UWP项目路径\项目名.csproj", "{项目唯一GUID}" Condition("$(Configuration.Contains('UWP'))") EndProject
- 也可以配合AppCenter的内置环境变量判断,例如仅在非AppCenter构建环境,或者明确构建UWP配置时才加载该项目:
Condition("$(APP_CENTER_BUILD) == '' Or $(Configuration.Contains('UWP'))")
注意事项
- 修改
.sln底层代码前请先备份原有文件,避免语法错误导致解决方案无法正常加载 - 团队协作场景优先选择方案1,不会出现不同成员本地加载解决方案内容不一致的问题
- AppCenter构建时支持传入自定义环境变量,可以配合条件逻辑实现更复杂的项目筛选规则
内容的提问来源于stack exchange,提问作者Yevhenii Yerokhin
相关产品推荐
相关产品推荐

