2014-01-29 2 views
0

Я создал легкое консольное приложение для получения значений ресурсов. Приложение работает с существующими ключами ресурсов. Но MissingManifestResourceException выбрано для не существующих ресурсовKeys. Что не так с моим кодом, пожалуйста? Для создания действия в файлах ресурсов установлено значение Embedded Resource.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; 
    } 
    } 
} 

Solution

+0

Загадочный вопрос. Что еще вы ожидали, когда используете ресурс, который не существует? –

+0

Метод GetString должен возвращать значение null в соответствии с документацией http://msdn.microsoft.com/cs-cl/library/bsb0cfet(v=vs.110).aspx – Czechtim

+0

Это не то, что говорит вам исключение. Невозможно найти весь фрагмент ресурсов. Вы передали неправильные аргументы конструктору ResourceManager. Дважды проверьте имя потока, запустив ildasm.exe и посмотрев директиву .mresource в манифесте. –

ответ

1

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

Смежные вопросы