我有两个产品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>
答案 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创建单独的文件 可能会为它们创建单独的片段也应该有效,尽管我还没有尝试过 其余的代码是一样的。