2009-04-29 69 views
4

我遇到过几个消息来源,指出使用包含文件(.wxi)将WiX安装文件拆分为单独的部分(变量,组件等)。对我来说非常有意义,所以我将<组件>组件从.wxs文件中取出并放入单独的文件中,但是当我尝试在Visual Studio 2008中编译项目时,每个<ComponentRef>都会收到错误声明它是“产品:{...}'部分中的”未解析的符号引用...“的引用。在Visual Studio WiX项目中使用WXI文件

我试过使用<?include“Filename”? >标签在我的Product.wxs文件中,但似乎打破了架构验证。如果这是包括它的方式,其中是否需要去?

我拥有的文件如下。

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> 

我如何得到它建立在Visual Studio?编写脚本似乎更简单,但不是我的问题。

回答

11

包含文件应该被认为是头文件,你真的只想用它们来声明你需要在多个.wxs文件之间共享的公共变量等。

我的项目使用〜10个.wxs文件和一个.wxi我定义产品代码,升级代码等英寸

为了什么我谈论检查出做题的一个更好的主意Wix Tricks & Best PracticesWiX Includes vs. Fragments以及一如既往,在Wix.chm

+0

@sascha在这里有正确的建议。上面的系统中不需要包含任何内容。这是蜡烛/光的力量。 – 2009-04-30 14:48:32

4

尝试使用WXS扩展而不是WXI。我打破了我的使命,并使用WXS作为扩展,它只是工作。项目中的所有WXS文件都由wixproj传递给wix编译器。

+1

@David McEwing是的,所有的.wxs文件都传递给蜡烛(编译器创建了一堆.wixobjs)*然后*所有的.wixobjs都传递给light(链接器“链接”.wixobjs和.wixlibs)过滤出你不参考的东西并创建.MSI/.MSM。 – 2009-04-30 14:48:05

0

文档发现这个问题,寻找我的问题,我想我会加我修复柜面有人从我在哪里来的。

如果您正在使用wixproj文件从Visual Studio进行编译,似乎此项目类型不支持文件链接(添加exise item ...添加为链接)。你最终会得到你的项目中的链接,但是当你编译它时会抱怨没有解决的符号。

相关问题