Чтение содержимого RESX из загруженной DLL, а не из файла RESX - PullRequest
0 голосов
/ 08 июля 2011

Мне нужно быть очень ясным в этом. Я не пытаюсь прочитать файл myfile.resx. Я пытаюсь прочитать содержимое файла myresourcenamespace.myfile.dll.

Я надеюсь создать словарь моих KVP, содержащихся в содержимом RESX, путем доступа к тому, что предварительно загружено в библиотеки DLL. Мое текущее решение слишком сильно зависит от существующих файлов и множества копий, чтобы гарантировать, что файлы находятся там, где они должны быть. На данный момент библиотеки DLL более надежны.

Мне удалось получить доступ к сборке через "new resourcemanager (myassemblytype)", но я застрял на этом этапе. Я не могу прочитать фактическое содержание из памяти. Я постоянно сталкиваюсь с MissingManifestException, когда пытаюсь получить доступ к контенту в виде потока из диспетчера ресурсов.

Вот мой успешный код:

var myType = Type.GetType("ViewRes.StaticMessages", true);
var myResManager = new ResourceManager("StaticMessages", 
                           System.Reflection.Assembly.GetAssembly(myType));

Вот мой код ошибки:

using (var fileReader = new ResXResourceSet(
                           myResManager.GetStream(myResManager.BaseName)))
{
//.... code read here
}

ResXResourceSet генерирует исключение MissingManifestException. Я перепробовал все, что мог придумать.

1 Ответ

0 голосов
/ 08 июля 2011

Вместо:

var myType = Type.GetType("ViewRes.StaticMessages", true);
var myResManager = new ResourceManager("StaticMessages", 
                       System.Reflection.Assembly.GetAssembly(myType));

Попробуйте вот так:

var myType = Type.GetType("ViewRes.StaticMessages", true);
var myResManager = new ResourceManager("StaticMessages", myType.Assembly);
// you could specify the desired culture for which you would like to get the
// resource values
var culture = CultureInfo.InvariantCulture; 
var resourceSet = myResManager.GetResourceSet(culture, true, true);

теперь вы можете выполнить цикл:

foreach (DictionaryEntry item in resourceSet)
{
    var key = item.Key;
    var value = item.Value;
}
...