我是 WiX 的新手。我在 wix 设置项目中找到了直接包含 Microsoft Bootsrappers 的教程。不幸的是,wix3.7 无法做到这一点,因为它希望使用 WiX 引导程序项目来检查先决条件。
如何在我的 WiX 3.7 引导程序项目中使用 Microsoft 提供的引导程序?
如果您已经构建了一个想要包含在 WiX Bootstrapper 项目中的 Microsoft Bootstrapper,则在 Wix/Bundle/Chain 下为它创建一个 ExePackage 元素(通常在一个名为 Bundle.wxs 的文件中)。列出 ExePackage 下 Payload 元素中所需的每个文件。
该列表很容易使用文本模板 (.tt) 生成。不幸的是,WiX 项目 (.wixproj) 不提供添加或构建此类文件的功能。简单的解决方法是创建一个空的 C# 项目,在其中添加一个文本模板文件,然后将生成的 WiX 文件添加到您的 WiX 项目中。
这是一个示例文本模板:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".wxs" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<!--
Generated file list for a WixBootstrapper project
<#=DateTime.Now.ToString("s")#>
-->
<#
// Assumes all projects are in sibling folders so relative paths can be used
var thisProjectDir = new FileInfo(this.Host.TemplateFile).Directory;
var appProjectDir = Path.GetFullPath(thisProjectDir + @"\..\DemoApplication");
var sourceFiles = Directory
.GetFiles(appProjectDir + @"\publish", "*.*", SearchOption.AllDirectories)
.Select(s => s.Replace(appProjectDir, @"..\DemoApplication"));
var payloads = sourceFiles
.Select(s => String.Format("<Payload SourceFile='{0}' Name='{1}' />", s, s.Replace(@"..\DemoApplication\publish\", "")));
#>
<Fragment>
<PackageGroup Id="DemoApplicationBootstrapper">
<ExePackage InstallCommand="Setup.exe" SourceFile="<#=sourceFiles.FirstOrDefault(s=>s.Contains("setup.exe"))#>">
<# foreach (var payload in payloads) { #>
<#=payload#>
<# } #>
</ExePackage>
</PackageGroup>
</Fragment>
</Wix>
它在 .wxs 文件中生成一个 WiX 片段。在 Bundle.wsx 中使用 PackageGroupRef 而不是 ExePackage。
VS 提示:要将现有文件添加到项目而不复制它,请单击“添加”按钮旁边的下拉箭头,然后选择“添加为链接”。
构建提示:通常,文本转换仅在保存模板时执行。当输出依赖于其他文件时,这不起作用。要在每个构建上进行转换,请使用 TransformOnBuild。
另一方面,您可能更愿意不使用 Microsoft Bootstrapper。然后,您必须将每个引用的包重新创建为一个或多个 Wix Bootstrapper ExePackage 或 MsiPacakges 元素。例如,如果您依赖于 SQL Server Compact Edition 4.0,您可以查看C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\SQL Server Compact Edition 4.0\EN\package.xml
、查看所需的安装文件和命令,并根据该信息编写一个 ExePackage 元素。