2012-02-17 2 views
3

Я продолжаю получать нулевое эталонное исключение из GetManifestResourceStream, пытаюсь добавить логотип компании на Lightswitch ленты и она должна работать нормально ....GetManifestResourceStream дает Null Reference исключение (имя параметр: StreamSource)

имел в виду LR__ http://social.msdn.microsoft.com/Forums/en-US/lightswitch/thread/2d16c638-f833-4c4c-beec-656912a87b8e/#76fa5382-0135-41ba-967c-02efc3f8c3a2

System.Windows.Media.Imaging.BitmapImage image = new System.Windows.Media.Imaging.BitmapImage(); 
image.SetSource(Assembly.GetExecutingAssembly().GetManifestResourceStream(
    Application.Current.Details.Name + ".Resources.logo.jpg")); 
Image myImage = new Image() 
{ 
    Source = image, 
    Stretch = System.Windows.Media.Stretch.Uniform, 
    HorizontalAlignment = HorizontalAlignment.Left, 
    Margin = new Thickness(2, 2, 2, 14), 
    Cursor = System.Windows.Input.Cursors.Hand 
}; 

Я пробовал много вещей, но я не могу найти, где проблема !!

+0

Вы уверены, что это исключение NullReferenceException, а не ArgumentNullException? –

+0

Отладить его. Посмотрите, что возвращает Assembly.GetManifestResourceNames(). Это, как правило, проблемы с именами имен. –

ответ

3

Does Logo.jpg Есть ли способ сборки для сборки в «Встроенный ресурс»?

Edit:

Здесь C# перевод моего GetResourceUri (обратите внимание, что требуется ресурс, не Embedded Resource):

public Uri GetResourceUri(this Assembly asm, string resourceName) 
{ 
    Uri result = null; 
    var assemblyName = new AssemblyName(asm.FullName).Name; 

    result = new Uri(string.Format("/{0};component/{1}", assemblyName, resourceName), UriKind.Relative); 

    return result; 
} 

Тот же "метод" должен работайте на C#.

У меня также есть собственное расширение оболочки (которое использует технику LR для добавления изображений на ленту & в меню навигации). Я просто заканчиваю несколько вещей (запись «документации» занимает некоторое время) &, тогда я выпущу его в галерее Visual Studio для сообщества (он называется Luminous Classic Shell).

Расширение позволяет получить изображения без необходимости писать код.

+0

Да, Янн! –

+0

'System.Windows.Media.Imaging.BitmapImage(); Assembly CurrentAssembly; CurrentAssembly = Сборка.GetExecutingAssembly(); Stream EmbeddedResourceStream = CurrentAssembly.GetManifestResourceStream (Application.Current.Details.Name + "ElectricalContructors.Resource.logo.jpg"); if (EmbeddedResourceStream! = Null) { image.SetSource (EmbeddedResourceStream); } '** @ Янн, я дважды проверил свой поток, все еще был нулевым ** –

+0

Является ли ресурс в том же проекте, что ваш код работает (это другое, что может быть неправильно)? –

0

Вы можете использовать такой инструмент, как Reflector, чтобы увидеть полные имена ресурсов в сборке.

+1

ILSpy - очень хорошая альтернатива – m1k4

0

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

В итоге я обнаружил, что причина в том, что я отправил файлы от графического дизайнера, который использует Apple &, они не работали. Я возился с разрешениями; использовал программу Paint, чтобы сохранить их в другом формате, но ничего не получилось. В конце я создал совершенно новый файл в Paint, а затем скопировал &, вставил пиксели с исходного изображения. Затем он работал.

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

2

добавить изображение или файл в проекте, затем выберите файл в окне решения проводника затем в окне свойств выберите Build Action установите значение «Embedded Resource», чтобы построить свойство действий

только это

enter image description here

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