HttpContext.GetGlobalResourceObject всегда null из библиотеки классов

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть resx-файл в App_GlobalResources в моем веб-приложении, вызываемый с:

 Resources.GetResource("ResourceFileName", "Resource")
  

Вспомогательный метод находится в отдельной библиотеке классов для получения значений ресурсов:

 using System.Resources;
using System.Web;

public static class Resources
{
    public static string GetResource(string resource, string key)
    {
        try
        {
            string resourceValue = (string)HttpContext.GetGlobalResourceObject(resource, key);

            return string.IsNullOrEmpty(resourceValue) ? string.Empty : resourceValue;
        }
        catch (MissingManifestResourceException)
        {
            return string.Empty;
        }
    }
}
  

Если я нажимаю F5, все работает нормально. Если я выполняю развертывание на веб-сервере, все вызовы GetGlobalResourceObject возвращаются как null.

Ресурсы существуют. Как мне их извлечь?

Спасибо,

Ричард

Ответ №1:

У меня тоже такая проблема, и да, «GetGlobalResourceObject (…)» всегда возвращает null после публикации.

Итак, я нашел решение, используя вместо ‘GetGlobalResourceObject(«Captions», «button_go_text»)’ to ‘Ресурсы.Подписи.ResourceManager.getString(ключ)’

Пример кода выглядит следующим образом

 
    public static string GetResMsg(this HtmlHelper htmlHelper, string key)
    {
      try
      {
        return Resources.[resource class name].ResourceManager.GetString(key);
      }
      catch
      {
        return "?";
      }
    }
  

Я надеюсь, что это помогает,

с наилучшими пожеланиями

Ответ №2:

Я смог решить эту проблему, установив для пользовательского инструмента моего файла ресурсов значение GlobalResourceProxyGenerator

И действие сборки для содержимого и свойства Копировать в выходной каталог для копирования всегда

Свойства файла ресурсов

Если бы я не сделал этого при публикации в рабочей среде, вызовы HttpContext.GetGlobalResourceObject всегда возвращали бы значение null.