如何在MSBuild的.Wixproj中获取被引用项目的Configuration与Platform参数
你可以通过以下两种方式实现该需求:
方式1:显式传递自定义目标平台参数
你可以在引导程序.wixproj中预先定义一个自定义属性,例如命名为TargetAppPlatform,构建时根据你要打对应架构的包传入对应值即可,传入后即可在项目文件中直接使用$(TargetAppPlatform)变量。
如果你用命令行构建,直接在构建命令中附加参数即可:msbuild 你的引导程序项目名.wixproj /p:TargetAppPlatform=x64 /p:Configuration=Release
如果你习惯在Visual Studio中操作,可以给解决方案新增两个配置,比如Release-x86、Release-x64,在每个配置下给引导程序项目的PropertyGroup节点中手动写死对应TargetAppPlatform的值即可。方式2:自动读取待安装项目的平台属性
你可以直接在.wixproj中加入MSBuild的GetProjectProperty任务,直接自动拉取AppToInstall.csproj的平台属性,不需要手动传参:<Target Name="FetchAppProjectProperties" BeforeTargets="BeforeBuild"> <!-- 拉取待安装项目的Platform属性 --> <GetProjectProperty ProjectFile="..\appToInstall\AppToInstall.csproj" PropertyName="Platform"> <Output TaskParameter="Value" PropertyName="AppToInstall.Platform" /> </GetProjectProperty> <!-- 还可以同步拉取待安装项目的Configuration属性,路径里的配置部分也不用硬写 --> <GetProjectProperty ProjectFile="..\appToInstall\AppToInstall.csproj" PropertyName="Configuration"> <Output TaskParameter="Value" PropertyName="AppToInstall.Configuration" /> </GetProjectProperty> </Target>加入这段配置后,你在整个.wixproj文件中都可以正常使用
$(AppToInstall.Platform)、$(AppToInstall.Configuration)变量,和你在Bundle.wxs中使用的Wix预定义变量效果完全一致。
如果你待安装的应用项目是用RuntimeIdentifier来区分x86/x64架构,直接把上面的PropertyName改成RuntimeIdentifier即可,拉出来的值就是win-x86、win-x64这类格式,路径拼接时可以省去win-前缀,更方便。
内容的提问来源于stack exchange,提问作者liquidair

