2010-12-14 60 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

哎呀,我將在錯誤的地方包括文件。被混淆的碎片和文件被包含在應該只與參考文件相關的地方。