У меня есть решение с несколькими проектами, основным проектом, проектом глобализации и тестовым проектом.
Когда код в основном проекте извлекает сообщение из файла Messages.de.resx проекта глобализации, все работает нормально.
Но когда я копирую тот же код в тестовый проект, я получаю исключение MissingManifestResourceException, сообщающее, что ресурсы для указанного или нейтрального языка и региональных параметров не найдены:
System.Resources.MissingManifestResourceException ist aufgetreten.
Message=Für die angegebene Kultur oder dieneule Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass EGR_IQone_Globalization.Messages.resources beim Kompilieren Richtig in die Assembly EGR_IQone_Globalization eingebette wurde, oder dass die erforderlichen Satellitenassemblys geladen werden werden und vollständig signiert sind. Source=mscorlib StackTrace: из System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName) из System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo культура, Dictionary`2 localResourceSets, логические tryParents, логические createIfNotExists, StackCrawlMark& stackMark) из System.Resources.Resources.Resources. InternalGetResourceSet (CultureInfo запрашиваемая культура, логическое значение createIfNotExists, логическое значение tryParents, StackCrawlMark и stackMark) из System.Resources.ResourceManager.InternalGetResourceSet (культураCultureInfo, логическое значение createIfNotExists, логическое значение tryParents) из System.Resources.ResourceManager.GetString (имя строки, культура и региональные параметры) из System. Resources.ResourceManager.GetString(имя строки) в EGR_IQone_Globalization.UserMessage.GetMessage(String msgID, String[] аргументы) в C:\projects\EGR_IQoneH\EGR_IQone\EGR_IQone_Globalization\UserMessage.cs:Zeile 28. Внутреннее исключение:
Обычно код работает только с использованием файла .resx, и даже использование resgen для его компиляции в файл .resources ничего не меняет.
Я думал, что это может быть связано с ResourceManager или указанной сборкой, но я не увидел никакой разницы между вызовом из основного проекта и вызовом из тестового проекта.
Это код:
public static class UserMessage
{
private static ResourceManager _resourceManager;
static UserMessage()
{
string baseName = Assembly.GetAssembly(typeof(UserMessage)).GetName().Name + ".Messages.de";
Console.WriteLine(baseName);
_resourceManager = new ResourceManager(baseName, Properties.GlobalizationAssembly);
}
public static string GetMessage(string msgID, params string[] arguments)
{
string msg = "";
string error = "[Message Error] cannot read Message " + msgID;
try
{
//DefaultLanguage = 'de'
//using the GetString overload with or without CultureInfo paramter makes no difference
msg = _resourceManager.GetString(msgID, new CultureInfo(Properties.DefaultLanguage));
for (int i = 0; i < arguments.Length; i++)
{
msg = msg.Replace("{" + i.ToString() + "}", arguments[i]);
}
}
catch (Exception ex)
{
Console.WriteLine(error + "\r\n" + ex.ToString());
return error;
}
return msg;
}
}
Спасибо!