使用VS安装项目制作MSI:32/64位系统条件引入文件咨询
VS Installer Project按目标系统位数控制文件安装的解决方案
条件不生效的原因
你之前尝试的[TARGETPLATFORM] = 'x86'写法不生效,是因为TargetPlatform是Visual Studio安装项目的设计时/生成时属性,不会被写入最终MSI包的运行时属性列表,安装阶段无法读取到这个变量,所以条件不会触发。
两种常用实现方案
根据你的需求场景,可以选择对应实现方式:
场景1:单安装包适配不同位数系统
如果只生成一个安装包,在安装时自动判断目标系统位数决定是否安装对应文件,直接使用Windows Installer原生的运行时属性VersionNT64即可:
- 仅在32位系统安装该文件,Condition填写:
NOT VersionNT64 - 仅在64位系统安装该文件,Condition填写:
VersionNT64
注意:如果你的安装包TargetPlatform设置为x86,在64位系统上会默认安装到
C:\Program Files (x86)目录,符合32位程序的安装逻辑。
场景2:生成x86/x64两个独立安装包
如果你需要分别生成两个架构的安装包,打包时就自动过滤不需要的文件,使用设计时变量即可:
- 为解决方案创建x86、x64两套生成配置,分别将安装项目的
TargetPlatform属性设置为对应值 - 在文件的Condition属性中填写如下内容(不要加方括号):
- x86专属文件:
$(TargetPlatform) = "x86" - x64专属文件:
$(TargetPlatform) = "x64"
- x86专属文件:
VS2019环境适配说明
首先确保你安装的「Microsoft Visual Studio Installer Projects」扩展已经更新到最新版本,旧版本存在$(TargetPlatform)设计时变量识别异常的问题,更新后重启VS重新生成即可解决。
内容的提问来源于stack exchange,提问作者dotNET
相关产品推荐
相关产品推荐

