【问题标题】:Conditional inclusion of files based on an Environment variable in a WIX file基于 WIX 文件中的环境变量有条件地包含文件
【发布时间】:2012-10-09 06:06:52
【问题描述】:

所以我有一个基于 WIX 的部署项目。我注意到您可以在其中包含功能和文件。但是,如果选择了 DEV/QA 环境,我只想部署特定文件。如果他们选择生产,我希望它忽略这个特定文件。

.wxi 文件中是否有办法根据变量的特定值有条件地包含功能/目录和文件?

即。我想要像下面这样的东西 - 可能是动态包含的 componentRef? (我已经清理了这些值)。

<Feature Id="MyApplication" Title="MyApp" Description="My Application" ConfigurableDirectory="MYAPP" Level="1">
      <ComponentRef Id="AppEmailTemplatesDir" />
 </Feature>

然后再往下

<Directory Id="EmailTemplatesDir" Name="EmailTemplates">
    <Component Id="AppEmailTemplatesDir" Guid="{A-GUID}">
         <File Id="EmailTemplate1.htm" Name="EmailTemplate1.htm" DiskId="1" Source="..\..\EmailTemplates\EmailTemplate1.htm" />
    </Component>
</Directory>

有什么想法吗?我们确实有自定义操作代码 (VB.NET),但我不确定除了编写代码以包含文件之外如何使用它。

【问题讨论】:

  • 是否需要有条件地将文件包含在输出包中?或者,包括所有文件,然后有条件地安装其中一些?答案取决于这个
  • 安装时 - 如果用户选择 QA 或 DEV 作为环境,我希望将文件包含在安装中。如果他们选择 PRODUCTION,那么我不想包含这些文件(即,我不想覆盖当前在生产中的任何文件)。所以我不想排除单个文件——我要么想要所有文件,要么不想要任何基于环境的文件。希望这有助于澄清:)

标签: wix


【解决方案1】:

似乎有多种方法可以做到这一点......这就是在 Visual Studio 2013 中对我有用的方法。

  1. 在 WiX 项目 Properties / Tool Settings 中将其添加到 Additional parameters / Compiler::

    -dReleaseType=$(ReleaseType)
    
  2. 创建一个仅包含附加文件的组件组(留作读者练习)

  3. 在主.wxs 文件中添加类似这样的内容,其中PDBFile 是第2 步中组件组的ID:

    <!-- Installs a PDB file for daily builds -->
    <?if $(var.ReleaseType) = daily ?>
      <ComponentGroupRef Id="PDBFile"/>
    <?endif?>
    
  4. 运行devenv以在环境中设置ReleaseType构建WiX项目

【讨论】:

    【解决方案2】:

    看起来我可以使用组件 NeverOverwriteOption="yes" 选项来确保安装程序不会在文件存在时覆盖它们。

    除非环境条件的东西很容易弄清楚 - 这似乎达到了我所需要的,即不覆盖生产中的文件。

    我还发现卸载时它会删除所有文件夹(如预期的那样),但要保留模板路径,我可以使用 Permanent="yes" 属性。

    经过讨论,我们决定将所有文件保留在源代码管理中并进行部署。但至少我了解了 NeverOverwriteOption 和 Permanent :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-15
      • 2018-11-14
      • 2017-11-14
      • 2014-02-01
      • 2016-01-17
      • 2013-09-16
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多