【问题标题】:C# application : Localization dlls missing after building installerC# 应用程序:构建安装程序后缺少本地化 dll
【发布时间】:2011-08-11 18:15:30
【问题描述】:

我正在开发这个表单应用程序,我在 C# 项目中使用本地化,其中不同的文本条目存储在资源文件(GlobalLanguages.resx 和 GlobalLanguages.fr.resx)中。这些设置为嵌入式。

在 VS 2008 的调试/发布中运行应用程序时,一切都很好,当我从 VS 2008 之外的输出文件夹启动 exe 时,它​​也能正常工作。但是当我构建 Visual Studio 安装程序项目以获取我的安装程序和在我的机器上安装它,本地化不起作用。即使安装文件夹中有一个包含 .fr.resx 值的 .dll 文件。

安装程序项目设置为包含主项目的本地化输出。并且将已安装应用程序的当前语言环境输出到日志文件确实给出了正确的值,但文本以默认语言显示。

我们确实使用 IlMerge 来合并 exe 中的几个 .dll 文件,但是由于可以找到资源的 .dll,我想这应该不是问题。我真的什么都试过了,但我现在想不通了……

希望大家帮忙。

谢谢

【问题讨论】:

  • GlobalLanguages.fr.dll 文件是与 exe 在同一文件夹中还是在 exe 目录下的“fr”目录中?如果你改变它,它会改变行为吗?
  • 如您所说,它位于“fr”子文件夹中。我会尝试将它移动到主文件夹,并在我回到我的电脑后查看它是否有任何作用。谢谢
  • 只要在VS下的bin/debug中具有相同的文件夹结构应该是正确的。另外,请确保您尝试不使用 ilmerge 来排除等式。
  • 由于我不在办公室atm,所以无法尝试,但我可以确认在调试文件夹中,资源dll也在子文件夹“fr”中,所以同样的设置。我也会在没有 IlMerging 的情况下尝试它,即使安装程序确实将资源 dll 放在安装文件夹中。感谢您的提示。
  • 试过了,还是不行。无论如何,谢谢...有什么方法可以检查本地化资源是否可以访问或存在?

标签: c# forms localization installation ilmerge


【解决方案1】:

试试这个只是为了诊断:(你显然需要更改类名/命名空间)。

 Type t = typeof(SomeClassInLanguageAssembly);
 Assembly languageAssembly = t.Assembly;
 Console.WriteLine("Current UI culture: "+Thread.CurrentThread.CurrentUICulture);
 Console.WriteLine("Resources in assembly:");
 languageAssembly.GetManifestResourceNames().ForEach(Console.WriteLine);
 ResourceManager r = new ResourceManager("Language.Assembly.Namespace.ResourceName", languageAssembly);
 Console.WriteLine("'YES' -> " + r.GetString("YES"));

如果我运行它输出例如:

当前的 UI 文化:fr

汇编中的资源:

Company.Application.Language.Resources.resources

'是' -> 哎呀

【讨论】:

  • 感谢sn-p,我稍后试试。现在,我刚刚将语言拆分为两个单独的资源文件,并编写了自己的控制器来检索正确的值。浪费了太多时间寻找解决方案,我在大约两个小时内得到了应用程序的概念证明截止日期。非常感谢您的帮助。
猜你喜欢
  • 2014-11-25
  • 2015-03-23
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2011-08-23
  • 2022-07-06
相关资源
最近更新 更多