WiX:如何自动包含本地化的卫星程序集?

3
可以将WiX设置为自动包含所有生成的卫星程序集吗?
目标是拥有一个单一的英语语言MSI,安装具有~10种语言的本地化字符串的应用程序。
我找到了这个现有的SO问题: 如何在使用WiX构建的MSI中包含卫星程序集(本地化资源)? 然而,该解决方案表明需要手动添加每个文化变体的新组件和目录定义。
那是唯一的方法,还是WiX能否从Visual Studio项目定义中自动学习每种语言?
(运行VS2010和WiX 3.8)
1个回答

0
您可以使用HarvestDirectory任务自动收集要包含在安装程序中的文件。您只需要将其指向带有卫星程序集的文件夹,并在每次安装程序构建时重新扫描目标文件夹,文件列表将被重新生成。
例如:
1)在beforedBuild目标内部放置.wixproj收获任务(默认情况下将被注释)。
<Target Name="BeforeBuild">
<HeatDirectory OutputFile="SatelliteAsm_Files.wxs" Directory="$(SolutionDir)PathToYourAssemblies" DirectoryRefId="MODULELOCATION" ComponentGroupName="Modules" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" AutoGenerateGuids="false" GenerateGuidsNow="true" ToolPath="$(WixToolPath)" PreprocessorVariable="var.ApplicationModuleDir" SuppressUniqueIds="True" />

2) 首次构建您的安装程序。之后,您将在WIX项目中找到SatelliteAsm_Files.wxs文件。它的结构类似于这个:

<Fragment>
    <DirectoryRef Id="DIRVARIABLE">
        <Directory Id="dir8B97956DEA791D69AB336941C9163652" Name="x64">
            <Component Id="cmpE72E1056FC8A2AE97260E772A6386763" Guid="{481FF1F3-7AFF-4C17-9AE0-5347BEEB3726}">
                <File Id="filACCD137532BB3AE1F4B3BC207018585B" KeyPath="yes" Source="$(var.ApplicationLibDir)\x64\name.txt" />
            </Component>
            ...
<Fragment>
    <ComponentGroup Id="GroupName">
        <ComponentRef Id="cmpE72E1056FC8A2AE97260E772A6386763" />
        ...

3) 把它作为链接添加到你的项目中(重要的是,你不想让源代码控制将该文件设置为只读,因为WIX在构建时会失败)。

4) 在任何一个功能中引用这个组件组。

 <Feature Id="MyFeauture">
    <ComponentGroupRef Id="GroupName" />

终于准备好了!现在从收集任务中指定的文件夹中收集的文件将包含在您的安装程序中。但是不要期望它可以直接使用,因为设置这个是非常麻烦的,您可能需要尝试不同的任务键或甚至XSD转换来仅留下所需的文件(是的,WIX可以进行XSD转换,但没有简单灵活的方法来过滤由WIX收集的文件或文件夹)

注意:您不仅可以将其用于卫星程序集 - 收集整个bin、第三方库或任何您想要的内容都可以,因此您无需每次向解决方案添加新程序集时手动更新安装程序项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接