ResourceManager не получает правильный файл resx

У меня проблема с получением правильных записей файла ресурсов, и мне нужна помощь ... вот мой сценарий

У меня есть серия проектов, которые являются частью большого решения для отчетности, которое соответствует этому формату.

Плагин. **** Отчет

  • Справка (папка)
  • DataAccessLayer (папка)
  • DataSets (папка)
  • DataWrappers (папка)
  • Локализация (папка)

    *.cs

Где * - название отчета, который я собираюсь сгенерировать

В * .cs есть оператор экспорта, так что я могу подобрать его с помощью MEF (не уверен, актуально ли это, но подумал, что стоит упомянуть). Пространство имен в * .cs - это CompanyName.DataShaper.Plugin. * Report. Из-за имени проекта и расположения файлов я изменил пространство имен по умолчанию для каждого проекта на CompanyName.DataShaper.Plugin. * Report (это был просто Plugin. * Report до моего изменения).

Теперь о проблеме ... внутри * .cs я создаю экземпляр ResourceManager. Это выглядит так ...

_resourceManager =
                new ResourceManager("CompanyName.DataShaper.Plugin.*Report.Localization.*Report",
                    Assembly.GetExecutingAssembly());

внутри моего файла дизайнера resx у меня есть следующее ...

internal static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CompanyName.DataShaper.Plugin.*Report.Localization.*Report", typeof(*Report).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }

Мой звонок менеджеру ресурсов выглядит так ...

string resourceString = _resourceManager.GetString(resourceKey, _currrentCultureInfo);

где _currentCultureInfo - правильный объект CultureInfo.

У меня есть 4 разных файла resx в моей папке локализации для каждого проекта (**** Report.resx, **** Report.fr-ca.resx, **** Report.en-gb.resx, *** * Report.de-de.resx).

Когда я вызываю диспетчер ресурсов, я всегда получаю запись из .resx ... никогда из других языковых файлов, независимо от объекта CultureInfo, который я передаю в вызов. Что я напутал?

-> Быстрое обновление моего исходного вопроса, но, похоже, это связано с MEF. Я создал экземпляр своего класса старомодным способом (new * Report ()) и сделал вызов локализации, и он отлично работает


person Chris    schedule 05.07.2010    source источник
comment
Что с *? Вы действительно собираете сателлиты?   -  person Hans Passant    schedule 06.07.2010
comment
У меня около 20 разных проектов, которые следуют одному и тому же соглашению об именах. * Просто представляет имя отчета. Например, одним из них является TransactionReport.cs .. так что есть TransactionReport.res, TransactionReport.en-gb.resx, Plugin.TransactionReport и т. Д.   -  person Chris    schedule 06.07.2010


Ответы (1)


Хорошо, я понял это ... Я получаю файл .resx, потому что он действительно встроен в основную сборку. Другие файлы встраиваются в отдельные библиотеки DLL для каждого языка, затем мне нужно скопировать их в ту же папку, из которой я создаю свой агрегатный контейнер, мой менеджер ресурсов затем видит все языки.

person Chris    schedule 09.07.2010