更改WIX的VS2010环境变量

And*_*nes 5 wix visual-studio-2010

我需要构建基于WIX的安装程序的两个品牌版本.版本之间的唯一区别是包含公司联系人详细信息的单个位图.我想保留一个WIX项目,这样我就可以维护更少的项目.我正在使用环境变量来改变将哪个位图插入到安装程序中

Source="$(env.CompanyName) contact.png"
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是我无法在VS2010中更改环境变量.VS2010正在使用VS2010启动时设置的环境变量来编译WIX安装程序.我必须重新启动VS2010才能让它获取新的环境变量值.

我有36个嵌套项目,所以我不想在每个项目中设置构建变量 - 这就是我试图使用环境变量的原因.

有谁知道如何更改当前VS2010实例使用的一个环境变量?或许还有更好的方法?

Han*_*ood 8

我这样做,并在一个WiX项目中进行了更多的定制.我为每个变体都有不同的项目配置.因此,我不是"调试"和"发布",而是"Debug","East"和"West".这仅适用于安装项目.代码项目仍然使用"Debug"和"Release".WiX编译器可以读取配置值.

<?if   $(var.Configuration)="West"?>
  <?define CompanyName="West Coast Office"?>
<?elif $(var.Configuration)="East"?>
  <?define CompanyName="East Coast Office"?>
<?else?>
  <?define CompanyName="Debugging purposes"?>
<?endif?>

Source="$(var.CompanyName) contact.png"
Run Code Online (Sandbox Code Playgroud)

或者,您可以将其添加到安装项目的预处理器变量(项目属性,构建,常规),但同样,您将需要多个配置:

CompanyName=West Coast Office
Run Code Online (Sandbox Code Playgroud)

在您的Product.wxs中:

Source="$(var.CompanyName) contact.png"
Run Code Online (Sandbox Code Playgroud)

要在Visual Studio中添加配置:

  1. 打开菜单Build,Configuration Manager ...

    创建解决方案配置

  2. Active solution configuration下,选择<New ...>
  3. 键入名称(例如,),从发布复制设置,不要创建新的项目配置.
  4. 对其他办公室(例如West)重复步骤2和3 .

    创建安装项目配置

  5. 在安装项目旁边,打开配置下拉菜单并选择<新建...>
  6. 键入名称,从发布复制设置,不要创建新的项目配置.
  7. West重复步骤5和6 .

    删除安装项目的发布配置

  8. 在安装项目旁边,打开Configuration下拉列表并选择<Edit ...>
  9. 选择Release并按Remove,然后按YesClose.

    删除解决方案的发布配置

  10. Active solution configuration下,选择<Edit ...>
  11. 选择Release并按Remove,然后按YesClose.

    将项目配置分配给解决方案配置

  12. Active solution配置下,选择East.
  13. 将安装项目的Configuration设置为East,将其他所有项目的配置设置为Release.勾选每个项目旁边的构建(假设您需要所有项目.)
  14. West重复步骤12和13 .

现在,当您选择每个解决方案配置时,您应该具有以下设置:

Solution       Debug    East     West
------------------------------------------
Main Project   Debug    Release  Release
Setup Project  Debug    East     West
Run Code Online (Sandbox Code Playgroud)

最后,进入安装项目的属性,确保东西配置的一切正确.记下输出文件夹.如果仍然是bin\Release,那么这两个配置将覆盖彼此的输出.分别设置为bin\Eastbin\West.