Подтвердить что ты не робот

Путают ресурсы и GetManifestResourceNames()

Я изучал ресурсы на С# и визуальные С# IDE. Теперь я смущен. Я прочитал несколько страниц в StackOverflow, как этот одно-как-get-the-path-of-an-embebbed-resource и документацию Microsoft, но это смутило меня.

Мой первый вопрос: какие ресурсы: это файл .resources или это файлы, которые внутри него, например значки.

second: Когда я использую метод GetManifestResourceNames: могу ли я получить имена файлов .resources или имена файлов внутри него. Когда я использую его в своей программе, я получаю только файлы .resources, но, читая такие темы, как этот сквозной сквозной доступ к ресурсам-в-resx файле, у меня создается впечатление, что я должен получить имена файлов внутри файла .resources.

Это я, или эта терминология действительно немного запутанна? Может ли кто-нибудь сделать это немного яснее? Спасибо за помощь.

4b9b3361

Ответ 1

Ресурсы - это любой файл, который вы компилируете, помещая его как "EmbeddedResource", это просто объединяет файл в сборку. GetManifestResourceNames() - это просто перечислитель, который дает нам имя всех встроенных файлов скомпилированных ресурсов, например. MyAssembly.resources. Фактические элементы ресурсов должны быть перечислены через ResourceSet, который загружает этот файл ресурсов.

Ответ 2

Я не знаю, нужен ли вам ответ на этот вопрос, но из моего опыта GetManifestResourceNames() возвращает имена файлов .resource, встроенных в вашу сборку.

Если вы хотите получить доступ к отдельным ресурсам, вы могли бы что-то сделать следующим образом:

Assembly assembly = Assembly.LoadFrom(assemblyName);
string[] names = assembly.GetManifestResourceNames();
ResourceSet set = new ResourceSet(assembly.GetManifestResourceStream(names[0]));
foreach (DictionaryEntry resource in set)
{
    Console.WriteLine("\n[{0}] \t{1}", resource.Key, resource.Value); 
}

Ответ 3

Я получил свой проект, чтобы работать из-за ответа Фелисы Поллано. Я добавил папку в мое решение под названием "Изображения" и открыл эту папку в проводнике Windows, а затем скопировал свой файл изображения в папку "Изображения" . Затем зайдите в визуальную студию и нажмите "показать все файлы" в верхней части обозревателя решений и щелкните правой кнопкой мыши файл изображения в папке "Изображения" и нажмите "Включить в проект". Затем я оставил клик по файлу изображения в проводнике решений, а в окне "Свойства" установите действие сборки в Embedded Resource, как вы упомянули.

Вот код, где я обратился к этому изображению

private Dictionary<int, Image> GetImages()
{
  List<Stream> picsStrm = new List<Stream>();

  Assembly asmb = Assembly.GetExecutingAssembly();
  string[] picNames = asmb.GetManifestResourceNames();

  foreach (string s in picNames)
  {
    if (s.EndsWith(".png"))
    {
      Stream strm = asmb.GetManifestResourceStream(s);
      if (strm != null)
      {
        picsStrm.Add(strm);
      }
    }
  }

  Dictionary<int, Image> images = new Dictionary<int, Image>();

  int i = 0;

  foreach (Stream strm in picsStrm)
  {
    PngBitmapDecoder decoder = new PngBitmapDecoder(strm,
      BitmapCreateOptions.PreservePixelFormat,
      BitmapCacheOption.Default);
    BitmapSource bitmap = decoder.Frames[0] as BitmapSource;
    Image img = new Image();
    img.Source = bitmap;
    img.Stretch = Stretch.UniformToFill;
    images.Add(i, img);
    i++;

    strm.Close();
  }
  return images;
}

На самом деле из этой статьи (приложение WCF-WPF Chat) Ислам ElDemery