Возможно, мне не хватает чего-то очень простого, но в чем преимущество использования отражения для извлечения встроенного ресурса из той же сборки, которая содержит ресурс, в отличие от просто получить его через файл .resx? Я вижу это много, но не понимаю - есть ли причина использовать Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)
по сравнению с файлом resx Resources.resource
? Даже Microsoft делает это: How to embed and access resources.Файл ресурсов (.resx) против отражения для доступа к встроенному ресурсу
Что я имею в виду именно так: предположим, у меня есть сборка MyAssembly
, которая содержит встроенный ресурс Config.xml
. Узел имеет MyClass
, который реализует метод, который возвращает указанный ресурс в виде строки:
public string GetConfigXML() // returns the content of Config.xml as a string
Часто я вижу это реализовано, как это, с помощью отражения, чтобы получить ресурс:
public string GetConfigXML()
{
Stream xmlStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssembly.Config.xml");
string xml = GetStringFromStream(xmlStream);
return xml;
}
Почему использовать GetManifestResourceStream()
когда вы можете:
- добавить файл ресурсов (
Resource.resx
) кMyAssembly
проекта в Visual Studio; - добавить
Config.xml
в список 'Files'; - получить содержание
Config.xml
в гораздо более простым способом:string xml = Resource.Config;
Я не знаю, как Visual Studio обрабатывает .resx файлы внутри, но я сомневаюсь, что это просто копирует ресурс в файл .resx (в в этом случае вы получите дублированные ресурсы). Я предполагаю, что он также не использует отражение внутри, поэтому почему бы просто не использовать файлы .resx в таких ситуациях, которые кажутся мне более удобными для меня?
Получение через сборку * может * сделать сборку знаний о спутнике, загружаемую для вас, тогда как загрузка resx оставила бы вас за выбор правильной для текущей культуры. –