C# 应用程序:构建安装程序后缺少本地化 dll

发布于 2024-11-29 06:49:51 字数 483 浏览 1 评论 0原文

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

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

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

我们确实使用 IlMerge 来合并 exe 中的多个 .dll 文件,但由于可以找到资源的 .dll,我想这应该不是问题。我真的已经尝试了一切,但我现在不知道了......

希望你们能提供帮助。

谢谢

I'm working on this form application where i use localization in a C# project, where the different text entries are stored in resource files (GlobalLanguages.resx and GlobalLanguages.fr.resx). These are set to be Embedded.

Everything works great when running the application in debug/release in VS 2008, and it also works when i start the exe from the output folder outside of VS 2008. But when i build the visual studio installer project to get my installer and install it on my machine, the localization is not working. Even tho there is a .dll file in the installation folder containing the .fr.resx values.

The installer project is set up to include the localization output of the main project. And outputting the current locale of the installed app to a log files does give the correct value, but the texts are displayed in the default language.

We do use IlMerge to merge several .dll files in the exe, but since the .dll for the resource can be found, i guess that should not be the problem. I've really tried everything, but i'm out of idea's now...

Hope you guys can help.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

人生百味 2024-12-06 06:49:51

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

 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

'YES' ->奥伊

Try this just for diagnosis: (you need to change classnames/namespace obviously).

 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"));

If i run that it outputs for example:

Current UI culture: fr

Resources in assembly:

Company.Application.Language.Resources.resources

'YES' -> Oui

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文