MissingManifestResourceException генерируется, когда не найден ключ ресурса в файлах ресурсов.

Я создал простое консольное приложение для получения значений ресурсов. Приложение работает для существующих ключей ресурсов. Но MissingManifestResourceException выбрасывается для несуществующих ключей ресурса. Что не так с моим кодом, пожалуйста? Действие построения в файлах ресурсов установлено на "Встроенный ресурс".

Program.cs

using Framework;

namespace ResourcesConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      string resourceValue = CustomResourceManager.GetResourceValue("notExistingResourceKey");
    }
  }
}

CustomResourceManager.cs

using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.Resources;

namespace Framework
{
  public class CustomResourceManager
  {
    private static Dictionary<string, ResourceManager> _resourceManagerDict;

    static CustomResourceManager()
    {
      _resourceManagerDict = new Dictionary<string, ResourceManager>();

      string defaultResourceManagerName = "Framework.CustomResources";
      ResourceManager defaultResourceManager = new System.Resources.ResourceManager(defaultResourceManagerName, Assembly.GetExecutingAssembly());

      _resourceManagerDict.Add(defaultResourceManagerName, defaultResourceManager);
    }

    public static string GetResourceValue(string key, string language = "en")
    {
      CultureInfo culture = new CultureInfo(language);

      string value = null;

      foreach (var resourceManager in _resourceManagerDict)
      {
        value = resourceManager.Value.GetString(key, culture); // MissingManifestResourceException is thrown when resource key is not found in resource file (should return null)

        if (value != null)
          return value;
      }

      return key;
    }
  }
}

Решение

1 ответ

Я нашел решение. Проблема была в том, что мне не хватало файла ресурсов для инвариантной (или по умолчанию) культуры. Поэтому я переименовал CustomeResources.en.resx в CustomeResources.resx, и он отлично работает

Другие вопросы по тегам