Как я могу получить встроенный ресурс XML? - PullRequest
5 голосов
/ 06 февраля 2009

Я добавил файл XML как встроенный ресурс в мою библиотеку классов, используя доступ к свойствам проекта в Visual Studio, а затем «Ресурсы | Добавить ресурс | Добавить существующий файл ...

Я пытался получить доступ к файлу, используя следующий код, но я продолжаю возвращать пустую ссылку. У кого-нибудь есть идеи?

var path = Server.MapPath("~/bin/MyAssembly.dll");
var assembly = Assembly.LoadFile(path);
var stream = assembly.GetManifestResourceStream("MyNamespace.filename.xml");

Ответы [ 3 ]

6 голосов
/ 06 февраля 2009

Мне гораздо проще использовать вкладку «Ресурсы» в диалоговом окне свойств проекта в Visual Studio. Затем у вас есть сгенерированная строго типизированная ссылка на ваш ресурс через:

Properties.Resources.Filename
3 голосов
/ 06 февраля 2009

Страница MSDN для GetManifestResourceStream делает следующее примечание:

Этот метод возвращает нулевую ссылку (Ничего в Visual Basic), если частный ресурс в другой сборке доступ и абонент не имеет ReflectionPermission с ReflectionPermissionFlag.MemberAccess флаг.

Вы пометили ресурс как "открытый" в вашей сборке?

0 голосов
/ 12 апреля 2012

Я обнаружил, что эта статья хорошо объясняет, как это настроить: http://www.devx.com/dotnet/Article/10831/1954

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

  • GetEntryAssembly: используйте этот метод для ссылки на исполняемый файл, который был запущен для запуска текущего процесса. Сборка ввода устанавливается для приложений форм Windows, но для большинства других приложений (например, веб-проектов) GetEntryAssembly возвращает «ничего» (или ноль, в C #).
  • GetExecutingAssembly: используйте этот метод для ссылки на ту же сборку, в которой находится исполняемый код.
  • GetCallingAssembly: используйте этот метод для ссылки на сборку, содержащую код, вызвавший текущий метод. Этот метод полезен, если вы пишете универсальный код для чтения встроенных ресурсов, которые находятся внутри общей сборки, где встроенный ресурс находится в вызывающей сборке.

Лично я предпочитаю этот метод использованию вкладки «Ресурсы», потому что он позволяет мне использовать другие инструменты для добавления ресурсов в проект для включения при компиляции. Мне не нужно использовать графический интерфейс с этим инструментом

...