2016-05-13 1 views
1

Я хочу создать пакет MSI, который содержит только одну функцию.Использовать элемент WIX в wxi и wxs с тем же идентификатором

У меня есть файл wxi, который генерируется автоматически. Я не могу изменить этот процесс.

wxi файл выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" ?> 
<Include> 
<!-- components --> 
<Feature Id="DefaultFeature" Title="Main Feature" Level="1"> 
    <ComponentRef Id="comp0" /> 
    <ComponentRef Id="comp1" /> 
    <ComponentRef Id="comp2" /> 
    <ComponentRef Id="comp3" /> 
    <ComponentRef Id="CleanupMainApplicationFolder" /> 
</Feature> 
</Include> 

У меня есть WXS файл, который я могу изменить:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Product ...> 
     <!-- components --> 
     <?include bundle.wxi ?> 
     <UI/> 
     <FeatureRef Id="DefaultFeature"> 
      <ComponentRef Id="comp999" /> 
     </FeatureRef> 
    </Product> 
</Wix> 

Когда я скомпилировать WXS в пакете MSI Light заявляю об ошибке:

error LGHT0095 : Multiple primary references were found for Feature 'DefaultFeature' in Product '{...}' and Product '{...}'.

Как изменить файл wxs, чтобы добавить компонент в функцию, определенную в файле wxi?

Заранее спасибо.

ответ

0

Используйте <ComponentGroup> в ваших файлах include вместо <Feature>. Затем определите свои функции в одном месте, файл .wxs с элементом <Product>.

Например, это то, как включить файл может выглядеть:

<Fragment> 
<Component Id="Comp1" Guid="{GUID-GOES-HERE}"> 
    ... 
</Component> 
<Component Id="Comp2" Guid="{GUID-GOES-HERE}"> 
    ... 
</Component> 
<Component Id="Comp3" Guid="{GUID-GOES-HERE}"> 
    ... 
</Component> 

<ComponentGroup Id="CG1"> 
    <ComponentRef Id="Comp1"/> 
    <ComponentRef Id="Comp2"/> 
    <ComponentRef Id="Comp3"/> 
</ComponentGroup> 
</Fragment> 

И основной product.wxs определяет функцию, включает в себя группу компонентов там и позволяет включать более компоненты:

<Feature Id="MainFeature" Title="..." Level="100"> 
    <ComponentGroupRef Id="CG1"/> 

    <!-- More components can go here --> 
    <Component Id=".."> 
    </Component> 
</Feature> 

Кроме того, вы можете включить файлы wxs вместо include. Пока основной wxs ссылается хотя бы на один элемент из другого wxs, будет включено все содержимое.

+0

Я не могу изменить файл включения wxi. Сюда входит файл, который создается автоматически. –

+0

Хм, в этом случае вместо добавления FeatureRef с тем же идентификатором вы можете указать 'Feature =" DefaultFeature "как атрибут для этих дополнительных компонентов ... –

Смежные вопросы