使用 cab 文件安装应用程序时,文化特定的字符串资源 dll 在 .net 紧凑框架中不起作用

Posted

技术标签:

【中文标题】使用 cab 文件安装应用程序时,文化特定的字符串资源 dll 在 .net 紧凑框架中不起作用【英文标题】:culture specific string resource dll not working in .net compact framework when application is installed using cab file 【发布时间】:2011-01-12 18:51:42 【问题描述】:

我在 windows mobile 6.1 上使用 Visual Studio 2008 和 .net compact framework 3.5 创建了一个本地化应用程序。 为了实现本地化,我为此使用了许多资源文件,每种语言一个:

StringResources.de-DE.resx

StringResources.es-ES.resx

StringResources.zh-CN.resx

StringResources.fr-FR.resx

StringResources.nl-NL.resx

我还有一个 StringResources.resx 文件,其中包含默认字符串,以防选择我的应用不支持的其他文化。

我还创建了一个 .cab 文件,使用“SmartDeviceCabProject”(vdproj 类型)在设备上执行此应用程序的安装。 (使用 msdn.microsoft.com/en-us/library/aa446504.aspx)

这是我面临的问题: 当我将文化更改为 nl-NL 以外的任何内容时,我总是得到默认字符串。

还请注意,当我将应用程序的“bin”文件夹复制粘贴到设备中时,会看到所有文化字符串。只有通过cab文件安装应用程序才会出现问题。

另外,如果我删除 StringResources.nl-NL.resx 文件并且只有

StringResources.de-DE.resx

StringResources.es-ES.resx

StringResources.zh-CN.resx

StringResources.fr-FR.resx

作为文化特定资源并重新创建 cab 文件,现在看到当我将文化更改为 fr-FR 以外的任何内容时,我总是得到默认字符串。所以只有最后一个文化文件总是有效的。

只是为了确保我通过设备上的 cab 文件区分了安装在每个文化文件夹中的 dll: de-DE\Application.StringResources.dll

es-ES\Application.StringResources.dll

zh-CN\Application.StringResources.dll

fr-FR\Application.StringResources.dll

nl-NL\Application.StringResources.dll

奇怪的是,我发现所有的 dll 都完全相同。但是,如果我比较“bin”文件夹中存在的 dll,就会发现它们是不同的。

因此,我相信 .cab 文件构建会导致将相同的 DLL 复制到每个文件夹。

记住以上解释,请帮助我:

**1。我该怎么做才能使 cab 文件将正确的 DLL 安装到文件夹中?

    还有其他方法可以放置正确的 dll 吗?

    还有其他方法可以实现本地化吗?**

【问题讨论】:

最后 3 个帮助请求毫无意义。真正的问题当然是 same 文件被复制了。你制作 .cab 的方式有问题,你没有描述它是如何完成的。 我已将“智能设备驾驶室项目”类型的新项目添加到解决方案中。在这个 cab 文件中,我添加了应用程序的输出和应用程序的本地资源作为要安装的文件。这是使用中描述的方法完成的:msdn.microsoft.com/en-us/library/aa446504.aspx 【参考方案1】:

此问题已在 WizCab.exe 中注册为错误:Smart Device CAB Project includes wrong localized resources。

我发现解决此问题的最佳方法是:

    将构建后事件添加到具有将资源文件复制到唯一(文件)名称的本地化资源的项目中:

    复制“$(TargetDir)sv\$(TargetName).resources.dll”“$(TargetDir)sv\sv_$(TargetName).resources.dll”

    针对当前的每种语言。

    执行构建并用空文件覆盖这些唯一资源文件 - 否则 Visual Studio GUI 将不允许您重命名(第 4 步)添加的文件。

    将复制的本地化程序集作为文件(右键单击 .cab-project 并选择“查看”->“文件系统”)在“应用程序文件夹”下添加到正确的本地化文件夹,而不是使用对项目输出的引用.

    将“文件系统视图”中添加的程序集重命名为其原始名称(“YourProject.resources.dll”。)

不是很好,但它有效。

【讨论】:

以上是关于使用 cab 文件安装应用程序时,文化特定的字符串资源 dll 在 .net 紧凑框架中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CAB安装程序无法复制System.dll,mscorlib.dll和mscorlib.tlb

为啥安装应用程序时经常会出现找不到DATA1.CAB这种提示?

visual studio 2008 安装时遇到cab3.cab具有无效的数字签名的错误

cab为后缀名的软件是啥?怎么运行?

我的是WIN7系统,在安装visual studio 2008的时候出现了错误1330,由于CAB文件 h:\cab5.cab无效数字签名?

Project Pro 2007 安装时老是提示找不到PrjProWW.cab