Получение имен изображений из DLL в виде списка? - PullRequest
0 голосов
/ 25 июня 2009

Я создал DLL для инкапсуляции моих изображений, и после этого я хочу получить имена изображений из DLL в виде списка. Перед публикацией этого поста я гуглил об этом и увидел пример ниже.

public static List<string> GetImageList()
{
    List<string> imageList;            
    System.Reflection.Assembly BOAUIResources = System.Reflection.Assembly.GetExecutingAssembly();
    string[] resources = BOAUIResources.GetManifestResourceNames();
    return resources.ToList<string>();
}

Этот код просто обращается к именам изображений, которые создают свойство действия, является "встроенным ресурсом". из-за доступа в WPF мой тип действия по сборке изображений должен быть определен как «ресурс».

Итак, как мне перечислить имена изображений, которые свойство действия сборки определяется как ресурс, из DLL?

Ответы [ 2 ]

2 голосов
/ 26 июня 2009

Попробуй это. (Взято из книги - Программирование WPF Крисом Селлсом, Яном Гриффитсом)

 public static List<string> GetImageList()
            {
                System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
                System.Globalization.CultureInfo culture = Thread.CurrentThread.CurrentCulture;
                string resourceName = asm.GetName().Name + ".g";
                System.Resources.ResourceManager rm = new System.Resources.ResourceManager(resourceName, asm);
                System.Resources.ResourceSet resourceSet = rm.GetResourceSet(culture, true, true);
                List<string> resources = new List<string>();
                foreach (DictionaryEntry resource in resourceSet)
                {
                    resources.Add((string)resource.Key);
                }
                rm.ReleaseAllResources();
                return resources;
            }
2 голосов
/ 26 июня 2009

Ресурсы изображений могут быть добавлены в сборку несколькими способами, что окажет некоторое влияние на код для перечисления имен изображений.

  • Вы можете добавлять изображения в файл resx.
  • Вы можете добавлять изображения непосредственно в решение (как в файлах кода) и устанавливать для их действия по сборке значение «Встроенный ресурс».

Пример кода, который вы указали в своем вопросе, будет работать во втором случае. Однако обратите внимание, что в нем также будут перечислены любые другие ресурсы манифеста (например, встроенные файлы resx), а не только ваши изображения.

Если вы добавили изображения в файл resx, вы можете перечислить ресурсы, используя ResourceSet, полученный из ResourceManager:

// This requires the following using statements in the file:
// using System.Resources;
// using System.Collections;

ResourceManager rm = new ResourceManager(typeof(Images));
using (ResourceSet rs = rm.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, true))
{
    IDictionaryEnumerator resourceEnumerator = rs.GetEnumerator();
    while (resourceEnumerator.MoveNext())
    {
        if (resourceEnumerator.Value is Image)
        {
            Console.WriteLine(resourceEnumerator.Key);
        }
    }
}

В первой строке, где написано ResourceManager(typeof(Images)), вам нужно будет заменить Images на имя файла ресурса i, в котором находятся ваши изображения (в моем примере это называлось «Images.resx») .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...