2008-10-01 11 views
17

ResourceManager에 명명 된 리소스가 있는지 확인하는 방법이 있습니까? 현재 MissingManifestResourceException을 잡아 내고 있지만 비 예외 상황에 예외를 사용하지 않아도됩니다. 리플렉션을 통해 ResourceManager의 이름 값 쌍을 열거 할 방법이 있어야합니까?ResourceManager에 리소스가 있는지 확인하십시오.

EDIT : 조금 더 자세히. 리소스는 어셈블리를 실행하는 것이 아니지만 ResourceManager는 정상적으로 작동합니다. 내가 _resourceMan.GetResourceSet(_defaultCuture, false, true)을 시도하면 null이되는 반면, 시도하면 반대로 _resourceMan.GetString("StringExists")을 얻는다.

답변

22

ResourceSet을 사용하여 열거하면 모든 데이터를 메모리로로드하기 만하면됩니다. 여기 예 :

// At startup. 
    ResourceManager mgr = Resources.ResourceManager; 
    List<string> keys = new List<string>(); 

    ResourceSet set = mgr.GetResourceSet(CultureInfo.CurrentCulture, true, true); 
    foreach (DictionaryEntry o in set) 
    { 
     keys.Add((string)o.Key); 
    } 
    mgr.ReleaseAllResources(); 

    Console.WriteLine(Resources.A); 
+0

ResourceManager에서 ResourceSet을 가져 오려고하면 null이 반환됩니다. –

+0

그래, 작동 시키지만 GetResourceSet을 호출하기 전에 하나의 리소스를로드해야한다. 위어드. –

3

Assembly.GetManifestResourceNames과 같은 것을 사용하여 어셈블리의 매니페스트에서 사용할 수있는 리소스 목록을 열거 할 수 있다고 생각합니다. 예쁘지 않고 모퉁이의 모든 경우를 해결하지는 않지만 필요한 경우 작동합니다.

+0

제로 문자열의 배열을 반환합니다. –

+0

리소스가 위성 리소스에 있습니까? – user7116

+2

그에게 ResourceManager 이름을 지정하고 해당 ResourceManager의 자원 이름은 지정하지 않습니다. –

관련 문제