2013-05-03 176 views
15

如果需要安裝.NET Framework 4.0,我正在嘗試創建一個軟件包。我意識到有類似的問題,但所有的答案只是片段,並沒有描述他們進入什麼文件,以及他們如何導入到.wxs文件。用於安裝.NET的WiX軟件包

這是我在一個Bundle.wxs文件中。我得到關於多個入口部分的編譯器警告。

錯誤2找到了多個條目部分'{CF06625F-7B6B-4B6E-A24E-FDDCA7CFFFF4}'和'{0D1EE60A-FC4F-4083-8B1E-311E75A67B4C}'。一個目標中只能有一個入口部分。

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Bundle UpgradeCode="{C6FF478E-C3DA-4D78-929D-24C3F3307356}" Version="4.0"> 
    <Chain> 
     <PackageGroupRef Id="NetFx40Redist"/> 
    </Chain> 
    </Bundle> 
</Wix> 

大多數WiX的頁面上的鏈接被破壞,並沒有提及關於屬性對包標籤使用,而且似乎互換封裝/產品的任何東西。我無法在Wix頁面找到關於爲Bundles設置GUID的提及。 Wix 3.7有什麼新東西?

http://wix.sourceforge.net/manual-wix3/install_dotnet.htm

  1. 我如何使用預定義的.NET 4.0 PackageGroupRef/PayloadGroupRef
  2. 是否必須在Bundle.wxs?它在哪裏被導入到我的主要Product.wxs中?

回答

18

這錯誤表明你的項目是包含這些元素的多個文件建築:ProductModulePatchPatchCreationBundle。在你的情況下,這聽起來像你添加了一個Bundle元素的文件到一個已經有Product元素的項目。這在今天的WiX工具集中不受支持。您需要將Bundle元素放置在單獨的項目中。

因此,當創建引導程序和MSI時,您將有兩個.wixproj文件。第一個.wixproj將包含您的Product信息。第二個.wixproj將包含您的Bundle信息並具有對第一個.wixproj的項目引用,以便構建順序正確。

+0

好吧,我將爲我的包創建一個sepetate proj。而且一個bundle可以有多個安裝程序鏈,對吧?我的鏈可以有.NET 3.5,.NET 4.0,SQL Server安裝程序等。 – 2013-05-03 16:14:05

+0

是的,正好。 'Bundle'是一個'包的集合'。 – 2013-05-03 16:30:53

+11

+1 - 找不到需要引用/創建2個Wix項目的任何參考/信息。 – abbottdev 2014-01-09 17:05:46

9

Wix/Bundle元素是Bootstrapper項目的根。它不會與您的Product.wxs在同一個項目中。在Visual Studio中,有一個用於新Wix Bootstrapper項目的模板。你可能還沒有創建一個。

然後在你的bundle的鏈中,你將需要.NET和你的應用程序的MSI,如例子。要使用NetFx40Web,您必須參考WixNetfxExtension。引用其他Wix項目的Wix項目具有預定義變量,因此您可以使用它們的屬性(如TargetPath)。該示例假定此Bootstrapper項目引用名爲MyApplicationSetup的安裝項目。

<Chain> 
    <PackageGroupRef Id="NetFx40Web"/> 
    <MsiPackage Id="MyApplication" SourceFile="$(var.MyApplicationSetup.TargetPath)"/> 
</Chain> 
+0

是的,我沒有使用VS的Bootstrapper proj,也沒有意識到它。 我認爲MsiPackage Id是指我的主安裝程序項目的軟件包ID?我對此感到困惑,因爲我的Package沒有ID,也沒有對Msi的引用。 – 2013-05-03 16:17:43

+0

我使用Bundle文件創建了我的proj,除非我想使用「NetFx40Redist」作爲軟件包參考。 EXE是建立的,但它大約1 MB。我期望它具有與它相鄰的.NET 4安裝文件,就像在Visual Studio部署項目中所做的那樣。我不確定它是否真的拉出了這個包。 – 2013-05-03 16:36:26

+0

WiX Toolset架構非常一致:Id屬性爲元素提供了唯一的名稱,這些元素可以由名稱以Ref結尾的元素引用。所以,MsiPackage Id是你給SourceFile指向的包的任意名稱。在引導程序的上下文中,「包」指的是任何類型的安裝程序,「msi」是Windows安裝程序包的暱稱。您的WiX安裝項目創建一個msi文件。 – 2013-05-03 18:29:09