Это интересный вопрос!
В руководстве говорится, что все, что может быть делегировано во фрагмент, имеет вариантный тег : FeatureRef для Feature, PropertyRef для Property и т. Д. Однако содержимое фрагмента в вашем вопросе не выдает никаких ошибок и проект строится нормально.
Я не знаю, намеренно ли это, у самого элемента Fragment нет брата по ссылке FragmentRef. По какой-то причине элемент Fragment имеет необязательный атрибут Id, но он указан для опытных пользователей, чтобы помечать разделы. Я не знаю, что это значит ...
Но, похоже, вы можете обмануть здесь. :-) Добавьте поддельный элемент ComponentGroup в ваш фрагмент, который не содержит реальных компонентов:
<Fragment>
<PropertyRef Id="NETFRAMEWORK35" />
<Condition Message="framework 3.5 is not installed">
<![CDATA[Installed OR NETFRAMEWORK35]]>
</Condition>
<ComponentGroup Id="Fake" />
</Fragment>
Теперь вы можете ссылаться на эту ComponentGroup в вашем основном Product.wxs, и содержимое всего фрагмента будет включено, как обещано в руководстве:
<Feature Id="ProductFeature" Title="My product feature" Level="1">
<ComponentRef Id="ProductComponent" />
<ComponentGroupRef Id="Fake"/>
</Feature>
Пока ComponentGroup не имеет никакого значения для самого MSI, он не приносит мусора в пакет MSI. Но это, конечно, загрязняет исходный код ...