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

Почему GetManifestResourceStream возвращает значение null, пока имя ресурса существует при вызове GetManifestResourceNames?

У меня есть проект веб-приложения. Я создал DLL и импортировал его в другой проект. Я реализовал VirtualPathProvider.

Я следил за этим веб-сайтом: http://support.microsoft.com/kb/910441/en-us?spid=8940&sid=global, и все работает, пока я не добавлю другого хозяина сайта.

  • Я добавил site_export.master и изменил его действие сборки на встроенный ресурс.
  • Я изменил свою страницу, чтобы использовать новый мастер сайта.
  • GetManifestResourceStream() возвращает null при загрузке site_export.master.
  • Я вызываю GetManifestResourceNames(), чтобы проверить, существует ли site_export.master в DLL. Это в списке. Все пространства имен совпадают. Я не перечислял пространство имен здесь.

Почему нельзя GetManifestResourceStream() загружать мой новый site_export.master? Он очень хорошо нагружает site.master. Я знаю, что моя DLL загружена, потому что я могу видеть другие файлы в DLL.

4b9b3361

Ответ 1

Помните следующие проблемы...

Шаг 1. Установите действие, установленное для встроенного ресурса, см.

С# s GetManifestResourceStream Gotcha

Шаг 2. Используйте namespace.resourcename см. GetManifestResourceStream() возвращает null?

Фактически, этот метод возвращает значение null, если доступ к частному ресурсу в другой сборке и вызывающий объект не имеет ReflectionPermission с флагом ReflectionPermissionFlag.MemberAccess.

Ответ 2

Side-подсказка. Чтобы убедиться, что вы находитесь в правильной сборке и с правильным именем: дамп и оцените все ресурсы, доступные в вашей целевой сборке

string[] names = assembly.GetManifestResourceNames();

(в моем случае я неправильно использовал пространство имен из другой сборки)

Ответ 3

Я сделал это, чтобы он работал:

Шаг 1: Выберите ресурс (CRDF.xsl в моем случае) и щелкните правой кнопкой мыши > Свойства. Установите Build Action на "EmbeddedResource" и логическое имя по вашему выбору, например. CRDFXSL.

Шаг 2: Измените исходный код следующим образом:

Assembly _assembly;
  _assembly = Assembly.GetExecutingAssembly();         
  xslStream = _assembly.GetManifestResourceStream("CRDFXSL");
  _xmlReader = XmlReader.Create(xslStream);

Таким образом, все прошло смутно.

Ответ 4

Подсказка и предостережение: Если "Project name" и "Default namespace" не совпадают в файле проекта, то GetManifestResourceStream вернет значение null. GetManifestResourceNames по-прежнему возвращает имена сборок, но во время загрузки манифест не будет работать.

Ответ 5

Попробуйте следующее:

Dim ctx As Windows.ApplicationModel.Resources.Core.ResourceContext = New Windows.ApplicationModel.Resources.Core.ResourceContext()
ctx.Languages = {Globalization.CultureInfo.CurrentUICulture.Name}
Dim rmap As Windows.ApplicationModel.Resources.Core.ResourceMap = Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap
Dim res = rmap.GetValue("Assets/sample.png", ctx)
Dim resFile = Await res.GetValueAsFileAsync

Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap список всех ресурсов.