如何有选择地包含Wix功能

时间:2014-10-09 12:22:46

标签: wix

我有两个产品Product1&产品2。 Product1使用p1.dll& Product2使用p2.dll 我为它们定义了单独的ComponentGroups,但是在相同的wxs文件(Groups.wxs)中 我已将这些ComponentGroups包含在单独的功能F1和F2(Feature.wxs)。
然后在Product1.wxs中为F1提供FeatureRef,在Product2.wxs中为F2提供。如下所示 在我的构建系统中,我在bin文件夹中有p1.dll或p2.dll 我为Product1构建安装程序时,bin文件夹中只有p1.dll 但是,当我为Product1构建安装程序时,它会抛出 - 错误LGHT0103:系统找不到文件'.. \ bin \ p2.dll'

当我没有在Product1中为F2提供FeatureRef时,为什么wix链接器会查找p2.dll? 我该如何解决这个问题?

Groups.wxs:
    <ComponentGroup Id="G1">
        <Component Id="C1" DiskId="1" Directory="BIN" Guid="xxxx">
            <File Id="C1" Name="p1.dll" Source="..\bin\p1.dll" />
        </Component>
    </ComponentGroup>

    <ComponentGroup Id="G2">
        <Component Id="C2" DiskId="1" Directory="BIN" Guid="yyyy">
            <File Id="C2" Name="p2.dll" Source="..\bin\p2.dll" />
        </Component>
    </ComponentGroup>

Features.wxs:
    <Feature Id="F1" Title="Feature1" Level="1">
        <ComponentGroupRef Id="G1" />
    </Feature>

    <Feature Id="F2" Title="Feature2" Level="1">
        <ComponentGroupRef Id="G2" />
    </Feature>

Product1.wxs:
    <FeatureRef Id="F1" />

Product2.wxs:
    <FeatureRef Id="F2" />

Product1.wixproj
    <ItemGroup>
        <WixCode Include="$(WixCodeDir)\Groups.wxs" />
        <WixCode Include="$(WixCodeDir)\Features.wxs" />
        <WixCode Include="$(WixCodeDir)\Product1.wxs" />
    </ItemGroup>

Product2.wixproj
    <ItemGroup>
        <WixCode Include="$(WixCodeDir)\Groups.wxs" />
        <WixCode Include="$(WixCodeDir)\Features.wxs" />
        <WixCode Include="$(WixCodeDir)\Product2.wxs" />
    </ItemGroup>

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。我在同一个片段中包含了ComponentGroups G1和G2。所以,即使我只在产品中包含了G1,G2也被包括在内。在单独的片段中添加它们后,问题得到了解决。

以下是示例代码。

<Fragment>
    <ComponentGroup Id="G1">
        <Component Id="C1" DiskId="1" Directory="BIN" Guid="xxxx">
            <File Id="C1" Name="p1.dll" Source="..\bin\p1.dll" />
        </Component>
    </ComponentGroup>
</Fragment>

<Fragment>
    <ComponentGroup Id="G2">
        <Component Id="C2" DiskId="1" Directory="BIN" Guid="yyyy">
            <File Id="C2" Name="p2.dll" Source="..\bin\p2.dll" />
        </Component>
    </ComponentGroup>
</Fragment>

然后,我必须为功能F1和F2创建单独的文件 可能会为它们创建单独的片段也应该有效,尽管我还没有尝试过 其余的代码是一样的。