Вопрос по c#, asp.net – Почему GetManifestResourceStream возвращает ноль, в то время как имя ресурса существует при вызове GetManifestResourceNames?

43

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

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

I added site_export.master and changed its Build Action to Embedded Resource. I changed my page to use the new site master. GetManifestResourceStream() returns null when I load site_export.master. I call GetManifestResourceNames() to check if site_export.master exists in the DLL and it does. It's in the list. All of the name spaces match. I didn't list the name space out here.

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

возможный дубликатCan't load a manifest resource with GetManifestResourceStream() nawfal

Ваш Ответ

5   ответов
82

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

Step 1, Действие сборки для встроенного ресурса см.

C # & # x2019; s GetManifestResourceStream Gotcha

Step 2, использованиеnamespace.resourcename увидетьGetManifestResourceStream () возвращает ноль?

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

Error: User Rate Limit Exceededstackoverflow.com/questions/10587875/…
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
62

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

string[] names = assembly.GetManifestResourceNames();

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

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededAssembly.GetExecutingAssembly().GetManifestResourceNames();
Error: User Rate Limit Exceeded
2

,

Подсказка и предостережение: Если & quot; Имя сборки & quot; и & quot; Пространство имен по умолчанию & quot; не совпадает в файле проекта, тогда также GetManifestResourceStream вернул бы ноль. GetManifestResourceNames по-прежнему возвращает имена сборок, но во время загрузки манифест не будет работать.

0

Попробуй это:

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 перечислите все ресурсы.

7

Я сделал это, чтобы заставить это работать:

Step 1: Выберите ресурс (в моем случае CRDF.xsl) и щелкните правой кнопкой мыши & gt; Свойства. Установите для параметра «Действие сборки» значение «EmbeddedResource». и логическое имя для имени по вашему выбору, например, CRDFXSL.

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

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

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

Error: User Rate Limit Exceeded<LogicalName>Error: User Rate Limit Exceededmanually.

Похожие вопросы