【问题标题】:WiX: How to automatically include localized satellite assemblies?WiX:如何自动包含本地化的卫星程序集?
【发布时间】:2023-03-28 16:55:02
【问题描述】:

可以将 WiX 设置为自动包含所有生成的附属程序集吗?

我们的目标是有一个单一的英语 MSI 来安装应用程序,该应用程序具有可用于约 10 种语言的本地化字符串。

我发现了这个现有的 SO question:

How do I include Satellite Assemblies(Localized Resources) in an MSI built with WiX?

但是,该解决方案建议需要为 每个 文化变体手动添加新的组件和目录定义。

这是唯一的方法,还是 WiX 能以某种方式自动从 Visual Studio 项目定义中学习每种语言?

(运行 VS2010 和 WiX 3.8)

【问题讨论】:

    标签: visual-studio-2010 internationalization wix windows-installer satellite-assembly


    【解决方案1】:

    您可以使用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)在您的任何功能中引用此 ComponentGroup

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

    终于准备好了!现在,从您在收获任务中指定的文件夹中收集的文件将包含在您的安装程序中。但是不要指望它可以开箱即用,因为设置它是非常痛苦的,您可能需要尝试不同的任务键组合甚至 XSD 转换以只留下需要的文件(是的 WIX 可以进行 XSD 转换,没有没有简单灵活的方法来过滤 WIX 收集的文件或文件夹)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 2019-11-11
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多