2013-06-13 63 views
0

我有一个解决方案,包括几个项目,一个主要项目,一个全球化项目和一个测试项目。我得到一个奇怪的MissingManifestResourceException

当主项目中的代码从全球化项目的Messages.de.resx文件中检索消息时,一切正常。

但是,当我相同的代码复制到测试项目中,我得到一个MissingManifestResourceException告诉我找到指定的或中性文化没有资源:

System.Resources.MissingManifestResourceException IST aufgetreten。
Message =Fürdie angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden。 Stellen SIE西歇尔,DASS EGR_IQone_Globalization.Messages.resources BEIM Kompilieren richtig在 芯片组件EGR_IQone_Globalization eingebettet wurde,奥德DASS死 erforderlichen Satellitenassemblys geladen werdenkönnenUND vollständigsigniert信德。源= mscorlib程序堆栈跟踪: 贝System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(字符串 文件名) 贝System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo的 培养,Dictionary`2 localResourceSets,布尔tryParents,布尔 createIfNotExists,StackCrawlMark & stackMark) 贝System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo的 requestedCulture,布尔createIfNotExists,布尔tryParents, StackCrawlMark & stackMark) 贝System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo的 培养,布尔createIfNotExists,布尔tryPa在 Ç租金) 贝System.Resources.ResourceManager.GetString(字符串名称,CultureInfo的培养物) 贝System.Resources.ResourceManager.GetString(字符串名称) 贝EGR_IQone_Globalization.UserMessage.GetMessage(字符串MSGID,字符串[]参数) :\项目\ EGR_IQoneH \ EGR_IQone \ EGR_IQone_Globalization \ UserMessage.cs:Zeile 28的InnerException:

通常情况下,代码只是用.resx文件,甚至使用RESGEN把它编译成.resources文件修改工作没有。

我认为这可能与ResourceManager或指定的Assembly有关,但我看不到主项目调用和测试项目调用之间有什么区别。

这是代码:

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

谢谢!

+0

这将是一个问题,它定位基础上的EXE的位置的卫星组装。您不再使用“常规”EXE运行,它现在是执行代码的测试运行器。很难修复,你最好在没有测试运行者的情况下测试这个场景。 –

+0

谢谢。我想我会跳过这个测试,然后因为它在常规代码中工作,这是不值得的时间或精力。但很高兴知道为什么它不起作用,所以如果再发生这样的事情,我至少有一个想法在哪里寻找问题。 – Ishiirou

回答

0

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

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

尝试类似以下或东西:

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