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); 
相關問題