2009-04-29 64 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 ...添加爲鏈接)。你最終會得到你的項目中的鏈接,但是當你編譯它時會抱怨沒有解決的符號。

相關問題