При использовании ResXResourceReader, как определить, является ли ресурс внедренным файлом или это встроенная строка - PullRequest
6 голосов
/ 17 ноября 2011

У меня есть отдельное приложение (предназначенное для проверки орфографии моих файлов .resx), которое запускается как событие перед сборкой. Однако, если файл .resx содержит текстовый файл (например, xml), мое приложение загрузит файл и попытается проверить его на орфографию. Это не совсем то, чего я хочу. Есть ли способ узнать из ResXResourceReader, является ли загруженный ресурс фактически файлом?

Пример кода выглядит так:

                ResXResourceReader reader = new ResXResourceReader(filename);
                ResourceSet resourceset = new ResourceSet(reader);

                Dictionary<DictionaryEntry, object> newvalues = new Dictionary<DictionaryEntry, object>();

                foreach (DictionaryEntry entry in resourceset)
                {
                    //Figure out in this 'if' if it is an embedded file and should be ignored.
                    if (entry.Key.ToString().StartsWith(">>") || !(entry.Value is string) || string.Compare((string)entry.Value, "---") == 0)
                        continue;
                 }

1 Ответ

6 голосов
/ 17 ноября 2011

Да. Установка UseResXDataNodes на ResXResourceReader приведет к тому, что значения словаря станут ResXDataNode вместо фактического значения, которое можно использовать, чтобы определить, является ли это файл или нет. Примерно так:

var rsxr = new ResXResourceReader("Test.resx");
rsxr.UseResXDataNodes = true;
foreach (DictionaryEntry de in rsxr)
{
    var node = (ResXDataNode)de.Value;
    //FileRef is null if it is not a file reference.
    if (node.FileRef == null)
    {
        //Spell check your value.
        var value = node.GetValue((ITypeResolutionService) null);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...