WiX Visual Studio安装项目:如何在一个项目中构建不同的msi,具体取决于预处理器变量

时间:2012-06-08 06:33:58

标签: wix setup-project

这种情况:我有一个wxs构建文件。它基于3个预处理器变量:

Build=[Client\Server] 
Platform=[Win32\x64]
Configuration=[Release\Debug]

我唯一需要的是创建一个setup visual studio项目,它可以一次构建我的安装包的所有这8个配置。

E.g。

Cmd.exe «candle.exe –dPlatform=Win32 –dConfiguration=Debug –dBuild=Server Product.wxs»
Cmd.exe «light.exe –ext WixUIExtension –ext WiXIISExtension Product.wixobj –out Product_Server(Release)_x86.msi»

Cmd.exe «candle.exe –dPlatform=Win32 –dConfiguration=Release –dBuild=Server Product.wxs»
Cmd.exe «light.exe –ext WixUIExtension –ext WiXIISExtension hsm.wixobj –out Product_Server(Release)_x86.msi»

但我不能使用基于命令提示的解决方案。需要一个完美的WiX设置解决方案。

有一些建议吗?

3 个答案:

答案 0 :(得分:1)

似乎是一个无法解决的问题。唯一的方法 - 创建不同的项目......从vs我们只能运行'平台'和'配置'这样的预处理器变量。每个额外的预处理器变量都迫使我们在“variable_range”中多次使用我们的解决方案。

明显的建议是将不同文件中的源代码分开。只是同意你注意每个构建的正确开发方式。但这种方式为源代码带来了更多的可读性。

可能会被删除...但是,如果有人知道这个问题的真正解决方案......请告诉我。

答案 1 :(得分:1)

您可以通过创建新的构建配置来创建单独的输出。例如,我们有两种产品来自非常相似的来源。您可以在属性组中指定输出名称。它将手动编辑你的wixproj,但在视觉工作室中可以很好地加载。

做这样的事情:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug (App1)' ">
    <OutputName>App1</OutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug (App2)' ">
    <OutputName>App2</OutputName>
</PropertyGroup>

Visual Studio应该显示两个配置 - Debug(App1)和Debug(App2)。

答案 2 :(得分:0)

我花了最后半天试图解决这个问题。在我看来,唯一的方法是单独的项目。我尝试重新编译项目的命令行,但是看起来MSBuild在编译wixproj文件时没有检测到构建属性的变化,然后WiX编译器没有找到正确的源文件在我运行'clean'以强制重新编译之后。

至少对于多个​​项目,源代码可以共享,并且全部用于单个解决方案。