Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
1

Связанные ресурсы приложения: вынести за пределы исполняемого файла

17.07.2015, 21:24. Показов 1157. Ответов 12

При добавлении ресурсов в проект Visual Studio, они создаются как связанные ресурсы. И по идеи вещей должны появляться рядом с исполняемым файлом в соответствующей папке Resource's. Но этого не происходит! Все ресурсы компилируются в сам *.exe-шник. А если в качестве ресурсов картинки и аудио файлы, то исполняемый файл начинает занимать много места. Да, и, если у меня два приложения должны использовать одни и те же ресурсы, то как быть?

Мне нужно сделать так, чтобы все ресурсы из проекта сохранялись рядом с исполняемым файлов в папке .\bin, а не вшивались в сам *.exe-шник. И что самое важное, при отсутствии доступа к какому-либо из файлов-ресурсов приложение просто выдавало ошибку....
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2015, 21:24
Ответы с готовыми решениями:

Добавить изображение в ресурсы исполняемого файла
Здравствуйте. Нужно добавить изображение в ресурсы исполняемого файла. Как это можно реализовать?

Как записать значение CheckBox в ресурсы исполняемого файла
Здравствуйте! Заранее извиняюсь за нубский вопрос, но всё таки он мне недаёт покоя. Как можно...

Получить имя исполняемого файла текущего приложения
К примеру я скомпилировал программу с названием myprogram.exe, а тот человек который скачал эту...

Как сменить значок исполняемого файла приложения
Люди добрые, я уже весь мозг сломал; куда уж надёжнее инфа? ...

12
burning1ife
1449 / 1271 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
18.07.2015, 00:39 2
Тогда выставляйте в Content, т.к. Resources делают именно то, что вы описали.
0
Администратор
Эксперт .NET
13974 / 11334 / 4593
Регистрация: 17.03.2014
Сообщений: 22,915
Записей в блоге: 1
18.07.2015, 00:40 3
Hemicide, если внимательно прочитать документацию (Linked and Embedded Resources), то станет понятно что оба типа ресурсов компилируются внутрь сборки. Вот прямая цитата:
Linked resources are stored as files in the project; during compilation the resource data is taken from the files and added to the manifest for the application. The application's resource file (.resx) stores only a relative path or link to the file on disk.

With embedded resources, the resource data is stored directly in the .resx file in a text representation of the binary data. In either case, the resource data is compiled into the executable file.
То есть у тебя неправильное понимание о работе связанных ресурсов.
Цитата Сообщение от Hemicide Посмотреть сообщение
Мне нужно сделать так, чтобы все ресурсы из проекта сохранялись рядом с исполняемым файлов в папке .\bin, а не вшивались в сам *.exe-шник. И что самое важное, при отсутствии доступа к какому-либо из файлов-ресурсов приложение просто выдавало ошибку.
Для начала не стоит зацикливаться именно на ресурсах. Нужные файлы можно положить рядом с exe в окрытом виде. Если же необходимы именно ресурсы, то создай Class Library, добавь в неё ресурсы и пользуйся из любого приложения.
1
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
18.07.2015, 01:06  [ТС] 4
Цитата Сообщение от kenny69 Посмотреть сообщение
Тогда выставляйте в Content
Зачем же мне их еще и копировать в отдельную папку, если они уже вшиты? Для использования их другим приложением? Это ужасно)
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Нужные файлы можно положить рядом с exe в открытом виде.
Так и лежит сейчас. Хотел обеспечить быстрый доступ к файлам, как к ресурсам.
0
burning1ife
1449 / 1271 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
18.07.2015, 12:43 5
Цитата Сообщение от Hemicide Посмотреть сообщение
И по идеи вещей должны появляться рядом с исполняемым файлом в соответствующей папке Resource's
Цитата Сообщение от Hemicide Посмотреть сообщение
Зачем же мне их еще и копировать в отдельную папку, если они уже вшиты?
Я тогда не понимаю чего вы хотите. Чтобы были в отдельной папке или вшиты в exe?
Если рядом в папке - установить в Content, вшиты - в Resources. Чего-то другого не дано.

Добавлено через 1 минуту
Либо же как уже предложили в отдельную dll запихать.
0
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
18.07.2015, 16:10  [ТС] 6
Цитата Сообщение от kenny69 Посмотреть сообщение
Если рядом в папке - установить в Content
Разве этот режим не означает "Всегда копировать" При это они вшиваются в *.exe и копируются рядом с ним.
Мне нужно чтобы ресурсы вообще никак не вшивались в *.exe. А брались программой из папки рядом.
Вы поймите, у меня, допустим, аудио и картинки не сжатые, и всё это шьётся в *.exe.
Это вот из каких соображений так сделано? Зачем раздувать *.exe-шник?
0
Администратор
Эксперт .NET
13974 / 11334 / 4593
Регистрация: 17.03.2014
Сообщений: 22,915
Записей в блоге: 1
18.07.2015, 16:17 7
Цитата Сообщение от Hemicide Посмотреть сообщение
Разве этот режим не означает "Всегда копировать"
Нет. За копирование отвечает параметр "Copy to Output Directory"

Цитата Сообщение от Hemicide Посмотреть сообщение
При это они вшиваются в *.exe и копируются рядом с ним.
Нет. Зачем делать и то и другое одновременно? Ресурсы вообще всегда встраиваются в EXE.

Цитата Сообщение от Hemicide Посмотреть сообщение
Мне нужно чтобы ресурсы вообще никак не вшивались в *.exe.
Тогда это уже не ресурсы в понимании .NET.

Цитата Сообщение от Hemicide Посмотреть сообщение
А брались программой из папки рядом.
Тебе кто-то запрещает?

Цитата Сообщение от Hemicide Посмотреть сообщение
Это вот из каких соображений так сделано?
Ресурсы считаются неотемлемой частью приложения и поэтому хранятся внутри него.

Цитата Сообщение от Hemicide Посмотреть сообщение
Зачем раздувать *.exe-шник?
Ты бы еще спросил почему значения переменных компилируются прямо в exe-шник. Если тебе нужны ресурсы (с их плюсами и минусами) используй ресурсы. Нет - значит не пользуйся и храни файлы в файловой системе.
0
burning1ife
1449 / 1271 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
18.07.2015, 16:26 8
Лучший ответ Сообщение было отмечено Hemicide как решение

Решение

Цитата Сообщение от Hemicide Посмотреть сообщение
Мне нужно чтобы ресурсы вообще никак не вшивались в *.exe. А брались программой из папки рядом.
С Content и Copy to Output Directory они появляются в папке рядом, ничего никуда не вшивается.
Вложения
Тип файла: rar WpfApplication3.rar (235.7 Кб, 7 просмотров)
1
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
18.07.2015, 16:41  [ТС] 9
kenny69, это в WPF (а при чём тут он?) они никуда не вшиваются.
В WinForms и копируются и вшиваются!
Вложения
Тип файла: rar WindowsApplication1.rar (3.09 Мб, 5 просмотров)
0
burning1ife
1449 / 1271 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
18.07.2015, 16:48 10
Так вы его в ресурсы добавили, конечно он вшивается.
0
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
18.07.2015, 16:48  [ТС] 11
Если файлы добавлять не через ресурсы, то тогда да, они не вшиваются и копируются рядом, но и пользоваться ими я не могу как ресурсами. Не могу я в дизайнере на этапе инициализации формы задать BackgroundImage как New Bitmap("Media/...")
0
burning1ife
1449 / 1271 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
18.07.2015, 16:56 12
Как бы разницы между WPF и Winforms в этом вопросе нет

Добавлено через 4 минуты
Цитата Сообщение от Hemicide Посмотреть сообщение
Если файлы добавлять не через ресурсы, то тогда да, они не вшиваются и копируются рядом, но и пользоваться ими я не могу как ресурсами.
Это логично, выбирайте либо одно, либо другое

Через CodeBehind
C#
1
this.BackgroundImage = new Bitmap(@"Resources\myImage1.jpg");
0
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
18.07.2015, 17:05  [ТС] 13
kenny69, ясно, понял, спасибо! На этом и остановимся пока что.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2015, 17:05

Получить имя исполняемого файла своего приложения
Хочу сделать автоспуск, но тут подумалось что пользователь может переименовать программу, как...

Получить имя исполняемого файла своего приложения
Добрый день. Хотелось бы узнать имя своей программы (которая исполняется) (программно). У меня...

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

Вынести изображение за пределы контейнера, Bootstrap
Всем привет! Условно, есть сайт, сверстанный на bootstrap 4. Есть такой блок см. вложение,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru