我在一年多前在Visual Studio 2010中创建了一个WIX项目。它创建一个MSI文件和一个bootstrapper setup.exe。实际上,它为两种语言创建了一对文件 - 英语和法语。我现在正在将此项目集成到我们的TFS CI构建中。我无法通过CI构建生成bootstrapper setup.exe文件。
我们最近将所有构建服务器上的Wix升级到Wix 3.6 RC。所以,我以为我会尝试Burn,而不是使用旧式的bootstrapper。我在我的解决方案中添加了一个新的Bootstrapper项目。 bootstrapper项目包含一个简单的bundle.wxs,它只加载我的旧MSI项目生成的MSI。但是,当我尝试构建时,我收到以下错误:
错误LGHT0103:系统找不到该文件 “C:\ TF \优势\开发\解\配置\ LaunchPad.Wix \ BIN \发布\ FR-FR \ LaunchPad.msi; C:\ TF \优势\开发\解\配置\ LaunchPad.Wix \ BIN \推出\ EN-US \ LaunchPad.msi”。
捆绑包中的我的包引用如下所示:
<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" />
LaunchPad.Wix是Wix MSI项目的名称。如果我更改LaunchPad.Wix项目只构建一种语言,那么它工作正常。在我看来,bootstrapper项目类型不支持构建多种语言的安装文件。这是真的?有关解决方法的任何建议吗?
修改
经过进一步调查,我想知道bootstrapper项目是否支持本地化。我尝试将我的Wix MSI项目设置为仅创建fr-fr。我的bootstrapper项目用英语创建的setup.exe。当我编辑bootstrapper项目的项目属性时,“Cultures to build”字段被锁定并且空白。我如何建立一个非英语的引导程序?这可能吗?
答案 0 :(得分:21)
这里有几件事情发生了:
如果您使用多个文化,则无法在需要单个文件名的MSBuild之外的某些内容中使用TargetPath。如您所见,TargetPath是已构建的本地化文件的列表。但是,如果您符合.msi包的输出语言,则可以使用TargetPath:<MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />
如果要创建一个可以同时安装en-US和fr-FR的引导程序,则需要在其自己的MsiPackage元素中单独列出每个.msi程序包。
如果你想创建两个bootstrappers,一个en-US和一个fr-FR,你需要两次调用bootstrapper .wixproj,每种语言一次。 Bootstrappers不支持Cultures&#34;技巧&#34; - 从单次调用MSBuild产生两个输出是有问题的(见目标路径问题)。
如果您正在使用WixStandardBootstrapperApplication,它会自动尝试根据用户UI语言本地化UI,回退到系统UI语言,最后回到英语。它在以LCID命名的目录中查找本地化字符串,因此您将拥有如下有效负载:
<Payload Name="1033\thm.wxl" SourceFile="..." />
<Payload Name="1036\thm.wxl" SourceFile="..." />
不幸的是,WixStandardBootstrapperApplication字符串目前仅适用于en-US。这就是fr-FR bootstrapper用英语显示UI的原因。您需要本地化WiX源文件HyperlinkTheme.wxl或RtfTheme.wxl(取决于您使用的主题)。这两个文件都在src \ ext \ BalExtension \ wixstdba \ Resources。
中答案 1 :(得分:4)
好。就像Bob Arnson所说的那样。
但您必须注意有效负载的名称和SourceFile。
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<Payload Name="2052\thm.wxl" SourceFile="2052\thm.wxl" />
</BootstrapperApplicationRef>
如果您将名称更改为另一个名称。引导程序不会被本地化。