VS 2022批量构建确定顺序时未考虑目标平台问题求助
解决VS批量构建时Wix安装程序平台依赖顺序问题
问题根源
VS默认的项目依赖是基于项目层级而非目标平台的,所以当C#项目的x64版本构建完成后,VS会认为两个Wix安装程序的依赖都已满足,提前启动x86 Wix安装程序的构建,导致它获取到旧的x86 DLL文件。
具体解决方案
1. 分离C#项目的平台输出目录
先确保C#项目的x86和x64版本输出到独立目录,避免文件覆盖或混淆:
- 右键C#项目 → 属性 → 生成
- 分别切换到x86和x64平台,设置输出路径为:
- x86:
bin\x86\$(Configuration)\ - x64:
bin\x64\$(Configuration)\
- x86:
- 可选:在“生成事件”的“后期生成事件命令行”中添加重命名命令,确保DLL文件名带平台标识:
// x86平台 copy "$(TargetPath)" "$(TargetDir)xxx32.dll" // x64平台 copy "$(TargetPath)" "$(TargetDir)xxx64.dll"
2. 给Wix安装程序添加平台专属依赖
修改Wix项目的.wixproj文件,让每个Wix安装程序只依赖对应平台的C#项目构建:
- 用文本编辑器打开x64 Wix项目的
.wixproj,找到<ProjectReference>节点,添加<Platforms>限制:<ItemGroup> <ProjectReference Include="..\YourCSharpProject\YourCSharpProject.csproj"> <Project>{你的C#项目GUID}</Project> <Name>YourCSharpProject</Name> <Platforms>x64</Platforms> <!-- 仅依赖x64平台的C#构建 --> </ProjectReference> </ItemGroup> - 同理,打开x86 Wix项目的
.wixproj,将<Platforms>设置为x86,确保它只等待x86 C# DLL构建完成后再启动。
3. 配置Wix安装程序的文件引用路径
确保Wix项目引用对应平台的DLL文件,在.wxs文件中使用平台变量:
<!-- x64 Wix项目的文件引用 --> <File Source="$(var.YourCSharpProject.TargetDir)xxx64.dll" /> <!-- x86 Wix项目的文件引用 --> <File Source="$(var.YourCSharpProject.TargetDir)xxx32.dll" />
$(var.YourCSharpProject.TargetDir)会根据当前构建平台自动指向C#项目对应平台的输出目录。
4. 调整批量构建的执行顺序
如果使用VS的“批量构建”功能,勾选项目时按以下顺序排列:
- x64 C#项目
- x86 C#项目
- x64 Wix安装程序
- x86 Wix安装程序
- x86 Wix捆绑包
如果使用MSBuild命令行构建,可通过分阶段执行确保顺序:
msbuild YourSolution.sln /p:Configuration=Release /p:Platform="x64" /t:Build msbuild YourSolution.sln /p:Configuration=Release /p:Platform="x86" /t:Build
先构建所有x64平台的项目,再构建x86平台的项目,从根源避免交叉依赖问题。
5. 验证捆绑包的依赖
确保Wix捆绑包项目的.wixproj中正确依赖两个Wix安装程序项目:
<ItemGroup> <ProjectReference Include="..\YourWixX64\YourWixX64.wixproj"> <Project>{x64 Wix项目GUID}</Project> </ProjectReference> <ProjectReference Include="..\YourWixX86\YourWixX86.wixproj"> <Project>{x86 Wix项目GUID}</Project> </ProjectReference> </ItemGroup>
这样捆绑包会等待两个MSI文件都生成完成后再开始构建。
内容的提问来源于stack exchange,提问作者S Bullen
相关产品推荐
相关产品推荐

