Visual Studio: как правильно ссылаться на ресурсы в разных проектах? - PullRequest
0 голосов
/ 12 ноября 2018

Местоположение изображения .xaml во вторичной ссылке не становится правильным расположением ресурса во время выполнения, оно вместо этого ссылается на папку первичных ссылочных ресурсов. Как я могу это изменить?

Фон -

У меня есть решение с несколькими проектами. Три важных проекта здесь

  1. проект WPF, который создается как библиотека классов
  2. класс по умолчанию библиотека
  3. консольное приложение для тестирования

В проекте WPF есть изображение .png. В созданном MainWindow он вызывается через:

<ImageBrush
  ImageSource="pack://siteoforigin:,,,/Resources/MyDemoImage.png" 
  Stretch="Uniform"/>

Когда я запускаю экземпляр окна WPF напрямую через console app, он работает нормально. Ссылка на ресурс становится во время выполнения:

C:\Users\me.me\Documents\Visual Studio 2015\Projects\sol\ WPFProjectName\ bin\Resources\MyDemoImage.png

Но если я создаю ссылку на проект WPF в проекте библиотеки классов, затем вызываю экземпляр библиотеки классов, адрес становится

C:\Users\me.me\Documents\Visual Studio 2015\Projects\sol\ ClassLibraryName\ bin\Resources\MyDemoImage.png

Таким образом, этот «пакетный» адрес становится ссылкой на ресурсы библиотеки классов, а не на папку ресурсов проекта WPF.

Теперь, я думаю, я мог бы просто добавить ресурс в эту библиотеку классов среднего уровня, но мне интересно, есть ли какой-нибудь правильный способ ссылки на «вторичный» ресурс, поэтому мне нужно добавить изображения только один раз?

Кстати, ошибка, которую я получаю, когда пытаюсь скомпилировать это System.Windows.Baml2006.TypeConverterMarkup - я нашел ответы на этот вопрос, но попробовал то, что они говорят, безрезультатно (пометить изображение как копию всегда и т. Д.)

1 Ответ

0 голосов
/ 12 ноября 2018

Изменение

pack://siteoforigin:,,,/Resources/MyDemoImage.png

до

pack://application:,,,/AssemblyName;component/Resources/MyDemoImage.png

Спасибо @Clemens за совет. Это отлично сработало.

Я просто хотел ответить и поделиться кое-чем другим накопленным разочарованием знанием, которое я нашел, экспериментируя с этим.

Использование pack://application:,,,/AssemblyName;component/Resources/MyDemoImage.png отлично сработало для моего первого изображения. У меня тогда было множество проблем, пытаясь сделать то же самое для 2-го / 3-го изображения. Он продолжал компилироваться нормально, но во время выполнения выдавались внутренние исключения, которые он не мог найти "resources / mydemoimage.png"

Причина этого кроется в BuildAction на изображениях. Я играл с разными типами, некоторые из которых работали для моей локальной копии (например, установка BuildAction на Embedded Resource фактически исправила первоначальную проблему, с которой я столкнулся), НО для работы pack://app..., скомпилировать, а затем продолжить установку и создание экземпляра в другом приложении (например, VBA в Excel) ...

Действие BuildAction ДОЛЖНО be Resource

Мне было чрезвычайно повезло, что я установил это случайно, прежде чем попытаться ответить Клеменсом, потому что если бы я этого не сделал, я бы предположил, что это просто не сработало! Но это так!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...