我有一个包含多个项目的解决方案,一个主项目,一个全球化项目和一个测试项目。
当主项目中的代码从全球化项目的Messages.de.resx文件中检索消息时,一切正常。
但是当我将相同的代码复制到测试项目时,我得到一个MissingManifestResourceException,告诉我没有找到指定或中性文化的资源:
System.Resources.MissingManifestResourceException ist aufgetreten。
消息=Fürdieangegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden。 Stellen Sie sicher,dass EGR_IQone_Globalization.Messages.resources beim Kompilieren richtig in 模具装配EGR_IQone_Globalization eingebettet wurde,oder dass die erforderlichen Satellitenassemblys geladenwerdenkönnenund vollständigigniertsind。 Source = mscorlib StackTrace: bei System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String 文件名) bei System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo) culture,Dictionary`2 localResourceSets,Boolean tryParents,Boolean createIfNotExists,StackCrawlMark& stackMark) bei System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture,Boolean createIfNotExists,Boolean tryParents, StackCrawlMark&安培; stackMark) bei System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture,Boolean createIfNotExists,Boolean tryParents) bei System.Resources.ResourceManager.GetString(String name,CultureInfo culture) bei System.Resources.ResourceManager.GetString(String name) bei EGR_IQone_Globalization.UserMessage.GetMessage(String msgID,String [] arguments)in C:\项目\ EGR_IQoneH \ EGR_IQone \ EGR_IQone_Globalization \ UserMessage.cs:Zeile 28. InnerException:
通常,代码只使用.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;
}
}
谢谢!
答案 0 :(得分:0)
我遇到了同样的错误 - 即使应用程序运行了一段时间,它突然发生了。
在获取资源之前,它有助于设置Thread.CurrentThread.CurrentUICulture
。
尝试以下或类似的东西:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
msg = _resourceManager.GetString(msgID);