NullReferenceException от AlphaImage.CreateFromResource () - PullRequest
0 голосов
/ 21 октября 2010

Я использую библиотеку AlphaMobileControls для .NET Compact Framework. Я использую AlphaImage.CreateFromResource (imageResourceName) для создания объекта AlphaImage. Проблема в том, что этот метод генерирует исключение NullReferenceException. Глядя на код для этого метода, проблема в том, что эта строка кода возвращает ноль:

MemoryStream stream = 
                (MemoryStream)Assembly.GetCallingAssembly().GetManifestResourceStream(imageResourceName);

Раньше это работало нормально, а сейчас - нет, и я не могу понять, почему. Кажется, я передаю правильное имя ресурса. Это ресурс, который я добавил на вкладке Ресурсы свойств проекта. Также в папке «Ресурсы» находится файл изображения, а для параметра «Действие построения» задано значение «Встроенный ресурс». Я даже использовал этот код для извлечения доступных ресурсов, и я использовал одно из возвращаемых значений:

string[] names = Assembly.GetCallingAssembly().GetManifestResourceNames();

Тогда я подумал, что, возможно, к моменту запуска кода метода AlphaImage.CreateFromResource () доступные ресурсы могут отличаться. Поэтому я изменил код, включив в него приведенный выше оператор, а затем выбросил исключение InvalidOperationException, если переданный ресурс не является доступным. Когда я запускаю программу и перебираю код с помощью отладчика, добавленного кода больше не существует, и InvalidOperationException не генерируется, и код будет выполняться, пока не возникнет исключение NullReferenceException. Я искал свои проекты, чтобы узнать, не была ли ссылка на другую версию AlphaMobileControls, отличную от той, в которой был измененный код, но я не смог найти ни одной.

Буду признателен за любую помощь, заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Арен в основном ответил на это своим комментарием. Вам необходимо вызвать AlphaImage.CreateFromResource () из сборки, которая имеет требуемый ресурс. Спасибо Арен.

Внесенное мной изменение, которое привело к прекращению работы, заключалось в том, что я переместил класс, вызывающий AlphaImage.CreateFromResource (), в отдельную библиотеку из библиотеки, в которой был ресурс изображения. Поэтому Assembly.GetCallingAssembly () возвращает сборку, у которой нет ресурса.

0 голосов
/ 21 октября 2010

Проверьте результат из Assembly.GetCallingAssembly().GetManifestResourceNames(); и посмотрите, появляется ли здесь искомое имя ресурса.Если этого не произойдет, ваши настройки свойств ресурса (в частности, «Build action: Embedded resource») могут быть установлены неправильноВ противном случае, возможно, папка была переименована, и вам нужно изменить значение imageResourceName.

...