2013-06-13 5 views
0

여러 프로젝트, 기본 프로젝트, 글로벌라이제이션 프로젝트 및 테스트 프로젝트가있는 솔루션이 있습니다.이상한 MissingManifestResourceException이 발생했습니다.

주 프로젝트의 코드가 세계화 프로젝트의 Messages.de.resx 파일에서 메시지를 가져 오면 모든 것이 잘 동작합니다.

System.Resources.MissingManifestResourceException IST aufgetreten : 내가 테스트 프로젝트에 동일한 코드를 복사 할 때

는하지만, 나는 MissingManifestResourceException 더 자원이 지정된 또는 중립 문화권을 찾을 수 없습니다 말해 얻을.
메시지 및 응답에 대해 Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen 펄펄 sicher, DASS EGR_IQone_Globalization.Messages.resources 베임 Kompilieren richtig 가 조립 EGR_IQone_Globalization eingebettet wurde 다이에 데르 DASS는 싶게 vollständig의 signiert 신드 erforderlichen Satellitenassemblys geladen의 werden의 können 다이. 출처 = mscorlib에의 스택 트레이스 : BEI의 System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing (문자열 fileName에) BEI System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet (CultureInfo를 문화, Dictionary`2 localResourceSets, 부울 tryParents, 부울 createIfNotExists, StackCrawlMark & stackMark) BEI System.Resources.ResourceManager.InternalGetResourceSet (CultureInfo를 requestedCulture 부울 createIfNotExists 부울 tryParents, StackCrawlMark & stackMark) BEI System.Resources.ResourceManager.InternalGetResourceSet (CultureInfo를 배양 부울 createIfNotExists 부울 tryPa C에서 지대) BEI의 System.Resources.ResourceManager.GetString (문자열 이름은 CultureInfo 배양) BEI System.Resources.ResourceManager.GetString (문자열 이름) BEI EGR_IQone_Globalization.UserMessage.GetMessage (문자열 MSGID 문자열 [] 인수) : \ 프로젝트 \ EGR_IQoneH \ EGR_IQone \ EGR_IQone_Globalization UserMessage.cs \ ZEILE (28)의 InnerException :

일반적으로 코드 단지의 .resx 파일을 사용하고 심지어 .resources 파일 변경으로 컴파일 resgen을 사용하여 작동 아무것도.

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

감사 :

이 코드입니다!

+0

, 그것은 EXE 파일의 위치에 따라 위성 어셈블리를 찾습니다 :

은 다음과 유사한 또는 뭔가를보십시오. "일반"EXE로 더 이상 실행하지 않습니다. 이제 코드를 실행하는 테스트 러너입니다. 수정하기가 쉽지 않으므로 테스트 주자없이이 시나리오를 테스트하는 것이 좋습니다. –

+0

감사합니다. 정규 코드에서 작동하기 때문에이 테스트를 건너 뛸 것이라고 생각합니다. 시간이나 노력의 가치가 없습니다. 그러나 그것이 작동하지 않는 이유를 아는 것은 좋은 일입니다. 그래서 이런 일이 다시 발생하면 적어도 문제를 찾을 곳을 생각해야합니다. – Ishiirou

답변

0

동일한 오류가 발생했습니다. 응용 프로그램이 잠시 실행되었지만 갑자기 발생했습니다.

리소스를 가져 오기 전에 Thread.CurrentThread.CurrentUICulture을 설정하는 것이 도움이되었습니다.문제가 될 것

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