Dll WIx CustomAction缺少本地化文件夹

Dll WIx CustomAction缺少本地化文件夹,dll,localization,wix,custom-action,Dll,Localization,Wix,Custom Action,我对一个自定义操作有一个问题,它引用了一个本地化的dll(我们称之为X.dll)。当我构建CA项目时,我可以在bin文件夹中看到几个语言文件夹(de,fr,…),每个都包含对应于该语言的X.resources.dll。运行安装程序时出现问题。当它提取CA二进制文件时,语言文件夹不存在;相反,我只能看到一个X.resources.dll文件。 我需要所有这些资源,否则我的操作将失败 有人知道为什么会发生这种情况,以及为什么提取的内容与CA项目的bin文件夹中的内容不同吗 安装程序配置为生成所有区域

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

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


安装程序配置为生成所有区域性。

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

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


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

正如Brian Sutherland所写,要使最终的CA dll包含其他文件,您可以将它们添加到由
$(CustomActionContents)定义的分号分隔字符串中

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

如中所述,要为解包的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>

$(自定义内容);ru\resources.dll=$(ProjectDir)…\ResourceProject\bin\$(ConfigurationName)\ru\resources.dll

我尝试将文件夹添加到项目文件中,如$(OutputPath)\..\de\file.resources.dll$(输出路径)\..\es。对于第一种情况,File.reosources.dll将被覆盖,因为存在另一种语言的文件,并且包中没有目录。在第二个示例中,我尝试获取文件夹,但在生成“System.UnauthorizedAccessException:拒绝访问路径”时出现错误。如果不包括文件夹,就没有必要包括这些文件,因为它们会覆盖其他文件。这就是我担心的=/我实际上做了一些查找并找到了(感谢您的链接。这正是我所期望的,除了一件事:cmd.exe的命令长度限制为8192个字符。如果路径文件导致MakeSfx命令长度超过8192个字符,它将失败并出错。我将尝试看看是否可以限制命令长度,或者是否可以使用类似压缩Bin文件夹的替代解决方案,包括在生成中添加zip,然后在实际操作之前将zip提取添加到CA方法中。非常感谢找到此解决方案!对于需要执行此操作的人来说,一件重要的事情是:确保在生成后命令中包含CustomAction.config,否则Sfx将使用CLR v2而不是4,这可能会导致错误。