我得到一个奇怪的MissingManifestResourceException

时间:2013-06-13 08:20:36

标签: c# globalization resourcemanager

我有一个包含多个项目的解决方案,一个主项目,一个全球化项目和一个测试项目。

当主项目中的代码从全球化项目的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;
        }
    }

http://pastebin.com/L0YNxyfK

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的错误 - 即使应用程序运行了一段时间,它突然发生了。

在获取资源之前,它有助于设置Thread.CurrentThread.CurrentUICulture

尝试以下或类似的东西:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
msg = _resourceManager.GetString(msgID);