Wix:在构建时有条件地添加文件

时间:2010-12-14 16:06:15

标签: include wix

您好 我正处于我需要在构建时有条件地包含大量文件的情况。

我需要一些提示来使用预处理器变量来设置在构建时安装程序中包含的特定文件组。

我在定义类似folloiwng时尝试了<? include Group1.wxi ?>

<Include>
  <DirectoryRef Id="PLANTROOT">
    <!--Adding Plugins======= Start ==-->
    <Directory Id="Plugins" Name="Plugins">
      <Directory Id="PIW_Plugin" Name="PIW">
        <Merge Id='PIWtoIDGNConverter' Language='0' SourceFile='PIWtoIDGNConverter.msm' FileCompression='yes' DiskId='1' />
        <Directory Id="Dir_ECFramework" Name="ECFramework" >
          <Merge Id='ECFrameworkMergeModule' Language='0' SourceFile='ECFrameworkMergeModule.msm' FileCompression='yes' DiskId='1' />
    </Directory>
        </Directory>
      </Directory>
    </Directory>
    <!--Adding Plugins=======Stop==-->
  </DirectoryRef>

<FeatureRef Id="PIWMain">
    <!--Sub Feature for PIW 2 IDGN Converter Plugin-->
    <Feature Id="PIW_imodel_OWL_Plugin" AllowAdvertise="no" Description="PIW i-model &amp; OWL" Display="expand" Level="1" Title="PIW i-model &amp; OWL" InstallDefault="followParent">
      <MergeRef Id='PIWtoIDGNConverter' />
      <MergeRef Id='ECFrameworkMergeModule' />
      <MergeRef Id='ECObjectsMergeModule' />
      <MergeRef Id='PlatformSdkBinariesMergeModule'  />
      <!-- <MergeRef Id='ECFW_LicenseClient'  /> -->
      <MergeRef Id='ManagedLogClientMergeModule'  />
      <MergeRef Id='ECClassEditor'  />
      <MergeRef Id='ClassEditorRDSPlugin'  />
      <MergeRef Id='SQLDbECPluginMergeModule'  />
      <MergeRef Id='SQLDbECCEExtensionMergeModule'  />
    </Feature>
  </FeatureRef>

即,引用父文件中的目录和功能。但是wxi不接受DirectoryRef和FeatureRef

非常感谢任何帮助。

谢谢和最好的问候

2 个答案:

答案 0 :(得分:4)

在这种情况下,我会完全避免包含。而是创建您的文件和组件,并将它们分组到单独的片段中的ComponentGroups中。然后在您的功能中有条件地包括ComponentGroupRefs。例如,假设您有一个files.wxs(想象更多文件;):

<Fragment>
  <ComponentGroup Id="Foo">
    <Component Directory="DirectoryId">
       <File Source="path\to\file.ext"/>
    </Component>
  </Component>
</Fragment>

然后在product.wxs:

<Product ...>
  <Feature Id="F">
    <?ifdef IncludeFiles ?>
       <ComponentGroupRef Id="Foo" />
    <?endif?>
  </Feature>
</Product>

答案 1 :(得分:0)

糟糕,我在错误的地方添加了包含文件。混淆了片段和文件被包含在仅应驻留在引用之后。