0

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

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

IE。我想要像下面这样的东西 - 可能是动态包含的 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),但我不确定除了编写代码以包含文件之外如何使用它。

4

2 回答 2

1

似乎有多种方法可以做到这一点......这就是在 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. 运行以在环境中使用 setdevenv构建 WiX 项目ReleaseType

于 2017-03-09T19:50:40.460 回答
0

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

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

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

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

于 2012-10-10T00:07:58.113 回答