2013-05-03 79 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