| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Обнаружение ошибки |
| Автор: V0fka 17.5.2014, 11:50 | ||
| Привет! Пока отлаживал программу все работало. Пробный "боевой" запуск, компилирую с конфигурацией Release, переношу на нужный комп, запускаю - программа падает. Запускаю в отладчике - тоже ошибка: ![]() Импирическим путём я определил, что проблема в отсутствии каталога с ресурсами в папочке Release. В XAML-е формы используется привязка к директории ресурсов:
и именно в этой привязке была проблема. Скопировал папку - запустилось. Вопрос: можно ли было как-то системно отследить эту и подобные ошибки? Т.е. чтобы куда-то посмотреть и узнать что конкретно системе не нравится? Хотя бы какая конкретно проблемная строка в XAML-е? А то по выдаваемому сообщению об ошибке как-то не очень понятно в чем проблема, тем более что сама форма в Visual Studio отрисовывается нормально и никаких ошибок нету. |
| Автор: V0fka 19.5.2014, 09:43 |
Картинка куда-то испарилась, повторяю:![]() |
| Автор: V0fka 22.5.2014, 08:46 |
| Я ерунду спросил? |
| Автор: Экскалупатор 22.5.2014, 14:33 |
почему же сразу "ерунду". Я, к примеру, не очень использую WPF, но мне кажется, что если система пишет что ошибка в парсере, то изначально надо проверить все ли есть что нужно для этого самого парсинга. ну и в деталях ошибки обычно больше инфы пишется. ну и если воспроизвести эту ситуацию и запустить под дебагом то должно ругаться более конкретно. |
| Автор: V0fka 28.5.2014, 09:49 |
| В общем, запустил опять, снова появилось такое окошко, но на этот раз в нём была кнопка "Сведения" (или что-то вроде того). Клацнул туда и там было написано, что система не может найти путь такой-то. Собственно, по такому сообщению все сразу становится ясно. Экскалупатор, ещё раз спасибо за ответ! |
| Автор: Ilya81 30.5.2014, 14:30 | ||
В WPF есть ресурсы, не зачем помещать картинки в отдельные файлы. Указываются прямо в XAML в виде:
|
| Автор: V0fka 2.6.2014, 19:34 |
| Ilya81, я где-то вычитал, мол "делается это так", поэтому так и сделал. На досуге обязательно попробую ваш вариант. Спасибо! |
| Автор: V0fka 3.6.2014, 09:32 |
| Ilya81, картинку я добавляю в ресурсы. Но обоими способами (и тот, который я использовал и тот, который вы посоветовали) если удалить каталог с ресурсами - приложение не запускается. Возможно я как-то не правильно картинку в ресурсы закидываю? У меня в любом случае получается (я по разному пробовал в свойствах ресурса-картинки клацать), что при компиляции картинка помещается в отдельный каталог Resources, который если удалить - то программа падает. Как её "встроить"? |
| Автор: Ilya81 3.6.2014, 10:24 |
| Что-то Вы неправильно делаете, если ошибка выплывает в runtime'е. Ресурсы статические, если их удалить, программа не будет build'иться. Во-первых, рекомендую проверить, что в свойствах файла картинки Build Action стоит Resource, по умолчанию на картинки может поставиться Content. И во-вторых, там же в свойствах надо выключить копирование в каталог сборки, картинки в этом случае будут внутри EXE или DLL, но не в отдельных файлах. И подчёркиваю - картинки, добавляемые в ресурсах не в каталоге bin, а в каталоге/подкаталогах самого проекта и видны в Solution Explorer по соседству с cs-файлами кода (если это не так, то это точно уж не WPF-ресурсы). |
| Автор: V0fka 3.6.2014, 12:39 |
| Я добавлял картинку в Resources.resx и оно само копировалось в каталог Resoursec. Сейчас в проекте создал отдельный каталог Images, добавил туда картинку, сделал настройки которые вы выше посоветовали - вроде работает Теперь возникло 2 новых вопроса 1) Какая разница между Images\img.png и pack://application:,,,/<имя сборки>;component/<подкаталоги>/<имя файла>.png ? 2) Для чего тогда нужно использовать ресурсы, добавляемые через Resources.resx ? |
| Автор: Ilya81 3.6.2014, 14:06 |
| Images\img.png - это т. с. относительный путь, разница примерно как между указанием пути как SomeDir\SomeFile.txt и D:\UpperDir\CurrentDir\SomeDir\SomeFile.txt. При указании относительного пути главное не перепутать, относительное расположение файла. Про Resources.resx и resgen, на котором он основан, - в принципе, кто как предпочитает, сам я чаще всего использую в нём строки для языковой локализации. Хотя WPF и для языковой локализации предлагает новое решение, оно гораздо менее удобно, к тому ж его (решение по языковой локализации) непонятно, как использовать, если строка сообщения формируется в коде. Но картинки, помещаемые в ресурсы таким способом, можно тоже получать в коде (например, если картинку нужно обрабатывать), хотя для этого может и Resources.resx подойдёт - это уже скорее дело вкуса. |
| Автор: V0fka 5.6.2014, 08:50 |
| Может я туплю, но если файл встроен в сборку, то разве можно ошибиться/перепутать при любом варианте указания пути? Разве вариант Images\img.png при встроенном файле при каких-то обстоятельствах может этот файл не найти? Про Resources.resx - спасибо! |
| Автор: Ilya81 5.6.2014, 11:24 |
| Не найти при выполнении не может встроенный в сборку файл, может не build'иться, если путь указан неправильно. Впрочем, если указана другая сборка, то может не найти саму сборку. |
| Автор: V0fka 6.6.2014, 08:50 |
| Что-то прояснилось, что-то не очень |
| Автор: V0fka 10.6.2014, 20:49 | ||
| Я извиняюсь, но вопрос всеже мне покоя не даёт... Так если путь указан в виде
и по факту окажется, что <подкаталоги> или <имя файла> отсутствует - оно разве за'build'ится? |
| Автор: V0fka 26.6.2014, 08:56 |
| Апну в надежде на то, что кто-то пробьёт мою броню. |
| Автор: DjonNIK 26.6.2014, 15:07 |
| Не проще ли самому проверить на тестовом решении? )) |
| Автор: V0fka 26.6.2014, 20:29 |
| Проверял. Но я разницы не пойму: если картинки по указанному пути в момент компиляции нету - то ошибка в обоих случаях. В этом сейчас и вопрос. |