Путают ресурсы и GetManifestResourceNames()
Я изучал ресурсы на С# и визуальные С# IDE. Теперь я смущен. Я прочитал несколько страниц в StackOverflow, как этот одно-как-get-the-path-of-an-embebbed-resource и документацию Microsoft, но это смутило меня.
Мой первый вопрос: какие ресурсы: это файл .resources или это файлы, которые внутри него, например значки.
second: Когда я использую метод GetManifestResourceNames: могу ли я получить имена файлов .resources или имена файлов внутри него. Когда я использую его в своей программе, я получаю только файлы .resources, но, читая такие темы, как этот сквозной сквозной доступ к ресурсам-в-resx файле, у меня создается впечатление, что я должен получить имена файлов внутри файла .resources.
Это я, или эта терминология действительно немного запутанна? Может ли кто-нибудь сделать это немного яснее? Спасибо за помощь.
Ответы
Ответ 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