有条件地包含基于WIX文件中的Environment变量的文件

时间:2012-10-09 06:06:52

标签: wix

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

.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),但我不确定除了编写包含文件的代码之外如何使用它。

2 个答案:

答案 0 :(得分:0)

看起来我可以使用Component NeverOverwriteOption =“yes”选项来确保安装程序在文件存在时不会覆盖这些文件。

除非环境有条件的东西很容易弄明白 - 这似乎达到了我所需要的,就是不要在生产时覆盖文件。

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

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

答案 1 :(得分:0)

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

  1. 在WiX项目属性/工具设置中,将其添加到其他参数/​​编译器:

    -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项目