2009-02-06 4 views
4

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

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

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

ответ

3

MSDN page for GetManifestResourceStream делает примечание:

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

Вы отметили ресурс как «общедоступный» в своей сборке?

+0

Я действительно отметил его как публичный в сборке. Еще нулевая ссылка. –

+0

Возможно, это как-то связано с настройкой «Build Action» для этого файла. Вы пытались изменить его на разные значения (например, Embedded Resource vs Content)? –

+0

Я никогда не устанавливал действие сборки для файла. Я только импортировал файл в файл .resx и испытывал трудности с извлечением его содержимого. Избавление от .resx и маркировка действия Build как «Embedded Resource» позволило мне получить к нему доступ, используя приведенный выше код. Большое спасибо за подсказку! –

5

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

Properties.Resources.Filename 
0

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^