Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129

Автоматическая установка действия при сборке resource

04.06.2022, 11:46. Показов 1004. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, нужно при копировании изображения в папку resources автоматически указывать действие при сборке - Resource, чтобы изображение отображалось на странице wpf. Т.к копирование фото в папку проекта происходит с помощью метода File.Copy(), а не вручную, то visual studio не видит в обозревателе эти фото и не устанавливает действие при сборке. Где-то находила решение автоматически редактировать файл .csproj, но не знаю как это реализовать и поможет ли это в целом. Буду благодарна за любую помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2022, 11:46
Ответы с готовыми решениями:

Как разделить действия при сборке на 32 и 64
Добрый день В pro-файле есть разделы win32 и unix для разделения для разных ОС. А как разделить под windows на 32 и 64? При сборке в...

Автоматическая установка приложений вирусом и открытие новых вкладок Автоматическая установка приложений виру
Вот логи. Пожалуйста помогите

Автоматическая установка режима Клон при выводе на ТВ
Здравствуйте. Имеется несколько ПК которые выводятся на ТВ. Есть следующая проблема: Каждый раз при подключении ТВ в качестве второго...

10
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
04.06.2022, 11:57
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
копирование фото в папку проекта происходит с помощью метода File.Copy(), а не вручную
Вы путаете Проект и Сборку.
Свойства ресурса устанавливаются в Проекте, для того чтобы компилятор мог правильно создать Сборку.
А ваш метод File.Copy() исполняется в рунтайм после запуска Сборки (приложения).
И даже если вы исхитритесь как-то в рунтайм запихнуть файл в Проект и задать нужные свойства ресурса - это никак не повлияет на саму Сборку.
Она как не видела, так и не будет видеть этот ресурс.
В общем случае сам Проект может быть на одном компе, а исполняемая Сборка на другом на противоположном конце Земли.

В этом разделе есть множество тем посвящённый работе с изображениями.
В том числе недавно была и про перенос файлов изображений в папку рядом со Сборкой (не Проектом!) и получение их оттуда.
Поищите по разделу, почитайте.
1
04.06.2022, 16:00

Не по теме:


Как я и говорил: я могу Вам помочь, но до четверга я занят просто ппц.



Не по теме:

Элд Хасп, слышал Вы тоже заняты, разгрузились чуток?)

0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
04.06.2022, 16:05  [ТС]
limeniye, да я подумала, чтоб вас не напрягать, мб кто дургой ответит)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
04.06.2022, 17:08
Цитата Сообщение от limeniye Посмотреть сообщение
слышал Вы тоже заняты, разгрузились чуток?
На небольшие короткие ответы - время есть.
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
04.06.2022, 17:29
Элд Хасп, ну там нифига не короткий ответ, если делать всё по нормальному

Если кратко AlenaAAAAA, забудьте про папку Resources.
1. Открыли диалоговое окно, выбрали файл -- скопировали в другой каталог (пусть будет для удобства Resources_2).
2. Успешно скопировали? Сохранили этот путь в базе данных. Отобразили файл из каталога Resources_2.
3. Закрыли программу.
4. Снова открыли программу. Проверили ссылки на файлы в базе данных и какие файлы есть в каталоге Resources_2.
5. Убедились что все файлы на месте. Ну и дальше делаете с ними что хотите.

Для этого создайте хотя бы какой-то статический класс типо:
C#
1
2
3
4
public static class OptionaResources
{
    public static Dictionary<int, Uri> ProductImages = new Dictionary<int, Uri>(); // где id -- это id товара, а Uri -- путь к изображению
}
Как я и говорил ранее, использование ссылок -- очень плохой вариант. Что если я удалю изображение во время работы программы? -- хана программе )
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
04.06.2022, 17:34  [ТС]
limeniye, спасибо, попробую. А если удалите, то поставим заглушку, не беда))
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
04.06.2022, 18:06
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
limeniye, спасибо, попробую. А если удалите, то поставим заглушку, не беда))
Проблемма не в заглушке, проблемма в том, что программа в некоторых местах может стучаться к файлу, которого уже не существует и в некоторых местах, особенно в такой архитектуре, это будет сложно проверить и выявить.

Я бы посоветовал Вам использовать ХОТЯБЫ такую арихтектуру.


Вот Вам все методы, чтобы переводить те или инные типы в нужные.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public static class ImageExtensions 
{        
    public static byte[] ConvertBitmapSourceToByteArray(Uri uri)
    {
        var image = new BitmapImage(uri);
        byte[] data;
        BitmapEncoder encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(image));
        using (MemoryStream ms = new MemoryStream())
        {
            encoder.Save(ms);
            data = ms.ToArray();
        }
        return data;
    }
 
    public static byte[] ConvertBitmapSourceToByteArray(string filepath)
    {
        var image = new BitmapImage(new Uri(filepath));
        byte[] data;
        BitmapEncoder encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(image));
        using (MemoryStream ms = new MemoryStream())
        {
            encoder.Save(ms);
            data = ms.ToArray();
        }
        return data;
    }
 
    public static byte[] ToByteArray(this BitmapSource bitmapSource) {
 
        var encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
 
        using (var stream = new MemoryStream()) {
            encoder.Save(stream);
            return stream.ToArray();
        }
    }
 
    public static BitmapSource ToBitmapSource(this byte[] bytes) {
 
        using (var stream = new MemoryStream(bytes)) {
            var decoder = new JpegBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);
            return decoder.Frames.First();
        }
    }
}
C#
1
2
3
4
5
6
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ImageInfo Image { get; set; }
}
C#
1
2
3
4
5
public class ImageInfo
{
    public int Id { get; set; }
    public byte[] Bytes { get; set; }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class ProductsViewModel
{
    public ObservableCollection<Product> Products { get; } = new ObservableCollection<Product>(); 
 
    public void UpdateProducts()
    {
        // получили все данные из базы данных: продукты и ссылки на изображения
        // путь это будет у нас какие-то переменные типо productsFromDb и imagesFromDb
        Products.Clear();
 
        foreach(var item in productsFromDb)
        {
            // Я не знаю как у Вас выглядит БД, но если у Вас изображение в одной таблице, а продукты в другой, тогда как-то так:
            var imageFromDb = imagesFromDb.First(x => x.ProductId == item.Id);
            var imageInfo = new ImageInfo(Id = imageFromDb.Id, Bytes = imageFromDb.ImagePath.ConvertBitmapSourceToByteArray());
            Products.Add(new Product { Id = item.Id, imageInfo });
        }
 
    }
}
В таком случае, даже если я удалю изображение из каталога Resources_2, у Вас всё равно в памяти всегда будут храниться его байты.

Я взял сылки на изображения из DataBase, нашёл для каких продуктов эти изображения, перевёл сами изображения в массив байт. Всё, теперь нам без разницы что у нас в папке Resource_2, будь она хоть пустой, все байты уже в памяти программы и их спокойно можно выводить в ItemsControl, например.
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
04.06.2022, 18:09  [ТС]
limeniye, поняла, спасибо
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
04.06.2022, 18:12

Не по теме:

Тьфу, хотел 2 строки написать -- увлёкся



Добавлено через 1 минуту
Цитата Сообщение от AlenaAAAAA Посмотреть сообщение
поняла
проверю!
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
04.06.2022, 18:13  [ТС]
limeniye, тогда двойное спасибо))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.06.2022, 18:13
Помогаю со студенческими работами здесь

При первом запуске программы автоматическая установка необходимых библиотек
Подскажите. Как можно реализовать на VB автоматическую установку библиотек которые используются в проекте , непосредственно при первом...

Resource Bundle - Автоматическая кодировка русского языка
Как настроить Intellij IDEA , чтобы ресурс для русского языка или для любого другого языка, символы которого не входят в стандартную...

Установка действия при открытии pdf каталога.
Здравствуйте Ув. форумчане !!! Подскажите пожалуйста, есть ли решение моего вопроса? Ситуация следующая: У меня на сайте...

Автоматическая установка ПО
Добрый день, подскажите один момент как прописывать скрипт во время установки программы?! получается наживает скрипт установить процесс...

Автоматическая установка БД
Здравствуйте. Интересует, возможно ли сделать автоматическую установку БД с определенными мною настройками и паролем рут-пользователя? ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru