代码之家  ›  专栏  ›  技术社区  ›  nagul

WiX:定义一个可能不存在的文件组件

  •  1
  • nagul  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  1
  •   saschabeaumont    16 年前

    wix preprocessor

    例如,假设您有一个名为APPTYPE的环境变量。如果其值设置为“完整”,则MyApp_Full.exe将被包含并由wix编译器(candle)处理。

    <Component Id='MyComponent1' Guid='fff60f72-5553-4e6b-9bf0-ad62ab9a90b1'>
     <?if $(env.APPTYPE) = Full?>
       <File Name='MyApp_Full.exe' DiskId='1' Source='..\MyApp_Full.exe' Vital='yes' />
     <?endif?>
     ...
    </Component>
    

        2
  •  2
  •   iwo    16 年前

    正如iwo所说, preprocessor variables

    <?if $(var.releasetype)=full ?>
      <ComponentRef Id="Somefile.dll" />
    <?elseif  $(var.releasetype)=enterprise ?>
      <ComponentGroupRef Id="SomethingElse" />
    <?endif?>
    

    Component ComponentGroup s分开 Fragment

    <Fragment>
      <Component Id="Somefile.dll" Guid="*">
        <File Id="Somefile.dll" KeyPath="yes" Source="SourceDir\Somefile.dll" />
      </Component>
    </Fragment>
    
    <Fragment>
      <ComponentGroup Id="SomethingElse">
        <ComponentRef Id="Somefile.dll" />
        <Component Id="AnotherFile.dll>
          <File Id="AnotherFile.dll" KeyPath="yes" Source="SourceDir\AnotherFile.dll" />
        </Component>
      </ComponentGroup>
    </Fragment>
    

    我个人使用 nant candle light 目标,为各种不同的构建和产品定义不同的变量,有效使用片段和预处理器变量,为项目之间或同一项目的各种版本之间的代码重用提供了巨大的机会。

    在您的情况下,检查文件是否存在。..然后,您只需使用内部函数来定义或重新定义稍后传递给WiX的变量。例如。:

    <if test="${not file::exists('something.dll')}">
        <property name="releasetype" value="blahblahblah" />
    </if>