2010-12-14 21 views
3

嗨 我在这种情况下我需要在构建时有条件地包含一堆文件Wix:在构建时有条件地添加文件

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

我尝试用<? include Group1.wxi ?>而定义诸如folloiwng:

<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

任何帮助将不胜感激。

感谢和问候

回答

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> 
0

哎呀,我将在错误的地方包括文件。被混淆的碎片和文件被包含在应该只与参考文件相关的地方。