使用 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具有无效的数字签名的错误
我的是WIN7系统,在安装visual studio 2008的时候出现了错误1330,由于CAB文件 h:\cab5.cab无效数字签名?