Я долго искал, но тема, кажется, совершенно особенная.Я ничего не придумал.Может быть, специалисты здесь помогут мне.
Я запускаю службу Windows, которая обращается к некоторым базам данных и выполняет некоторые вычисления.Если что-то не получится, это приведет к записи в файле журнала.Мое желание состоит в том, чтобы lacalize эти записи.До сих пор это работало нормально с каждым проектом, кроме этой службы 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 просто не может найти спутниковую сборку, а затем откатк нейтральному файлу ресурса, который, кажется, находится внутри exe-файла службы Windows.Кто-нибудь знает, как я могу получить службу Windows, чтобы найти спутниковую сборку.
Редактировать 2: РЕШЕНИЕ
Дорогой коллега помог.Я строго назвал спутниковую сборку и зарегистрировал ее в GAC.Это было решение.Теперь служба Windows может получить к ней доступ.Подробные шаги: В редакторе файловой системы проекта установки: Добавить специальную папку -> Общая папка кэша сборок.Добавить файл -> Я добавил сюда файл ресурса. Затем в Свойствах проекта -> Подпись «Подписать сборку» и создайте новый файл ключей.
Вот и все.
Спасибо, Нильс