Я создал легкое консольное приложение для получения значений ресурсов. Приложение работает с существующими ключами ресурсов. Но 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;
}
}
}
Загадочный вопрос. Что еще вы ожидали, когда используете ресурс, который не существует? –
Метод GetString должен возвращать значение null в соответствии с документацией http://msdn.microsoft.com/cs-cl/library/bsb0cfet(v=vs.110).aspx – Czechtim
Это не то, что говорит вам исключение. Невозможно найти весь фрагмент ресурсов. Вы передали неправильные аргументы конструктору ResourceManager. Дважды проверьте имя потока, запустив ildasm.exe и посмотрев директиву .mresource в манифесте. –