WIx CustomAction 缺少本地化文件夹

WIx CustomAction missing localization folders

我对引用本地化 dll(我们称之为 X.dll)的自定义操作有疑问。当我构建 CA 项目时,我可以在 bin 文件夹中看到几个语言文件夹(de、fr、...),每个文件夹都包含与该语言对应的 X.resources.dll。当我 运行 设置时出现问题。当它提取 CA 二进制文件时,语言文件夹不存在;相反,我只能看到一个 X.resources.dll 文件。 我需要所有这些资源 dll 存在,否则我的操作将失败。

有没有人知道为什么会发生这种情况以及为什么提取的内容与 CA 项目的 bin 文件夹中的内容不一样?

设置配置为构建所有区域性。

有一种方法可以将更多文件包含到 makesfxCA.exe 的 cmd 行中。我认为您需要定义 $(CustomActionContents) msbuild 属性 这是一个以 ; 分隔的文件路径列表。

您可以在 wix.ca.targets 文件中的自定义操作项目末尾看到 运行 的 msbuild 目标。

我不知道这是否会尝试将所有包含的文件放在根路径中,所以这可能会导致重名 dll 出现问题。或者,您可以弄清楚如何为所有支持的语言创建一个本地化 dll,但这可能很困难(尽管我确信这一定是可能的)。

正如 Brian Sutherland 所写,要使最终的 CA dll 包含额外的文件,您可以将它们添加到由 $(CustomActionContents).

定义的分号分隔的字符串中

用于打包 CA dll 的构建操作称为 PackCustomAction。在该构建操作之前,需要将其他文件添加到 属性。

this blog post 中所述,要为解压缩的 CA dll 创建目标文件夹结构,您需要使用以下语法添加文件:

<TargetDir>\<TargetFileName>=<SourceDir>\<SourceFileName>

在自定义操作项目文件中使用单独构建目标的解决方案示例,它将在 PackCustomAction 之前执行并将 ru\resources.dll 文件添加到 CA dll。

  <Target Name="AddFilesToCA" BeforeTargets="PackCustomAction">
    <PropertyGroup>
      <CustomActionContents>$(CustomActionContents);ru\resources.dll=$(ProjectDir)..\ResourceProject\bin$(ConfigurationName)\ru\resources.dll</CustomActionContents>
    </PropertyGroup>
  </Target>