Localization 本地化Windows服务

Localization 本地化Windows服务,localization,windows-services,Localization,Windows Services,我已经搜索了很长时间,但主题似乎很特别。我什么都没想到。也许这里的专家能帮我 我运行一个Windows服务,它访问一些数据库并进行一些计算。如果某项操作失败,则会在日志文件中生成一个条目。 我的愿望是把这些条目拼凑起来。 除此Windows服务外,到目前为止,这对每个项目都很有效 我使用资源管理器和本地化的资源文件。 在运行期间,CultureInfo的更改方式为: Thread.CurrentThread.CurrentUICulture = new CultureInfo(this.lang

我已经搜索了很长时间,但主题似乎很特别。我什么都没想到。也许这里的专家能帮我

我运行一个Windows服务,它访问一些数据库并进行一些计算。如果某项操作失败,则会在日志文件中生成一个条目。 我的愿望是把这些条目拼凑起来。 除此Windows服务外,到目前为止,这对每个项目都很有效

我使用资源管理器和本地化的资源文件。 在运行期间,CultureInfo的更改方式为:

Thread.CurrentThread.CurrentUICulture = new CultureInfo(this.language);
其中language是从配置文件读取的值。 下一行显示了这些更改:

LogService.WriteEntry(CultureInfo.CurrentUICulture.Name, EventLogEntryType.Information);
这将起作用并返回正确的CultureInfo。 资源文件的名称正确,但仍然无法访问本地化文件(在这种情况下为“de”),并且使用默认(英文)文件。 我将资源文件添加到安装项目的项目输出中

编辑: 在其他项目中,以下各项工作正常,但不适用于Windows服务:

ResourceManager locRM = new ResourceManager("WindowsService.ResWindowsService", Assembly.GetExecutingAssembly());
Windows服务似乎就是找不到附属程序集,然后返回到中性资源文件,该文件似乎位于Windows服务exe文件中。 有人知道如何让Windows服务找到卫星程序集吗

编辑2:解决方案

一位亲爱的同事帮忙。 我强烈地命名了卫星组件,并在GAC中注册了它。这就是解决办法。现在Windows服务可以访问它了。 详细步骤: 在安装项目的文件系统编辑器中:添加特殊文件夹->全局程序集缓存文件夹。 添加文件->我在这里添加了资源文件 然后在项目属性->签名标记“为程序集签名”下,创建一个新的密钥文件

就这样

谢谢,
Nils

您是否碰巧在单独的卫星组件中拥有德国资源?这可能是问题的根本原因…嗨,帕维尔,谢谢你的回复!是的,卫星组件中包含的资源是德国的。资源文件包含ResourceManager使用的名称和德语值。我更新了上面的帖子。已解决:请参阅上面的解决方案…那么你会说这是一个权限问题吗?如果附属程序集位于正确的文件夹(即de-de-folder或其他任何文件夹)中,则运行时应该能够找到它,除非更改了专用bin文件夹,或者服务无权读取该文件夹中的文件。我已经在服务中运行资源很长时间了,从来没有遇到过这种情况,所以一定有一些特殊情况阻止了直接从Bin文件夹加载资源。