2009-04-29 3 views
4

Ich habe mehrere Quellen gefunden, die eine WiX-Installationsdatei in die separaten Teile (Variablen, Komponenten usw.) unter Verwendung von Include-Dateien (.wxi) aufteilen. Macht Sinn für mich, also nahm ich die <Komponenten> Knoten aus der .wxs-Datei und legte sie in eine separate Datei, aber wenn ich versuche, das Projekt in Visual Studio 2008 zu kompilieren, bekomme ich einen Fehler für jede <ComponentRef> es ist eine "ungelöste Referenz auf das Symbol '...' im Abschnitt 'Produkt: {...}'".Verwenden von WXI-Dateien in Visual Studio WiX-Projekt

Ich habe versucht mit der <? Include "Dateiname"? > Tag in meiner Product.wxs-Datei, aber das scheint die Schema-Validierung zu brechen. Wenn das der Weg ist, es einzuschließen, wo muss es gehen?

Die Dateien, die ich habe, sind die folgenden.

Product.wxs

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product ...> 
    <Package .../> 
    <Media .../> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
    </Directory> 
    <Feature Id="MainProgram" Level="1"> 
     <ComponentRef Id="ProductComponent" /> 
     <Feature Id="ContextMenu" Level="2"> 
     <ComponentRef Id="ContextMenuComponent" /> 
     </Feature> 
    </Feature> 
    </Product> 
</Wix> 

Components.wxi

<?xml version="1.0" encoding="utf-8"?> 
<Include> 
    <Fragment> 
    <Component Id="ProductComponent" ...> 
     <File .../> 
    </Component> 
    <Component Id="ContextMenuComponent" ...> 
     <RegistryKey .../> 
    </Component> 
    </Fragment> 
</Include> 

Wie bekomme ich es in Visual Studio zu bauen? Scripting der Build scheint einfacher, aber noch kein Problem von mir.

Antwort

11

Include-Dateien sollten als Header-Dateien gedacht werden, Sie wollen sie nur verwenden, um gemeinsame Variablen usw. zu deklarieren, die Sie zwischen mehreren .wxs Dateien teilen müssen.

Mein Projekt verwendet ~ 10 .wxs Dateien und eine einzelne .wxi, dass ich den Produktcode definieren, Upgrade-Code, etc in.

Für eine bessere Vorstellung von dem, was ich rede über die SO Fragen überprüfen Wix Tricks & Best Practices und WiX Includes vs. Fragments auch, wie immer, die Dokumentation in Wix.chm

+0

@sascha hat hier den richtigen Vorschlag. Sie brauchen in Ihrem System oben überhaupt kein Include. Das ist die Kraft von Kerze/Licht. –

4

Versuchen Sie, die WXS-Erweiterung anstelle von WXI zu verwenden. Ich habe meine kaputt gemacht und WXS als Erweiterung benutzt, und es hat einfach funktioniert. Alle WXS-Dateien im Projekt werden vom wixproj in den wix-Compiler übertragen.

+1

@David McEwing Ja, alle aus den .wxs-Dateien werden an Candle übergeben (der Compiler, der eine Reihe von .wixobjs erstellt) * dann * alle .wixobjs werden an Light übergeben (der Linker, der ".wixobjs" verbindet) und .wixlibs), um das Zeug herauszufiltern, auf das Sie nicht verweisen, und die .MSI/.MSM zu erstellen. –

0

diese Frage für mein Problem Suche gefunden und ich dachte, ich meine fix hinzufügen würde incase jemand herkommt, wo ich tat.

Wenn Sie eine Wixproj-Datei zum Kompilieren von Visual Studio verwenden, scheint es, dass dieser Projekttyp keine Dateiverknüpfungen unterstützt (Add exising item ... Add as link). Sie werden mit den Links in Ihrem Projekt enden, aber wenn Sie es kompilieren, werden Sie sich beschweren, dass es ungelöste Symbole gibt.

Verwandte Themen