WIx CustomAction缺少本地化文件夹



我有一个自定义操作的问题,它引用了一个本地化的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。其他文件需要在该构建操作之前添加到属性中。

如本文所述,要为解压缩的CA dll创建目标文件夹结构,您需要使用以下语法添加文件:
<TargetDir><TargetFileName>=<SourceDir><SourceFileName>

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

  <Target Name="AddFilesToCA" BeforeTargets="PackCustomAction">
    <PropertyGroup>
      <CustomActionContents>$(CustomActionContents);ruresources.dll=$(ProjectDir)..ResourceProjectbin$(ConfigurationName)ruresources.dll</CustomActionContents>
    </PropertyGroup>
  </Target>

最新更新