Этого треда уже нет.
Это копия, сохраненная 18 июня 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
2 2601336
>>2599243 →

>Вообще. Я чет стал за 10 лет коммерческой разработки - каким-то хуйлом, если честно. Все чаще ловлю себя на мысли, что большая часть "правил", это какой-то карго-культ.


>


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


Я тоже спустя много лет пришёл к таким выводам.
3 2601364
>>01336

>который можно выкинуть нахуй, как только задача поменяется



Спустя 30 минут
@
Задача меняется
4 2601450
>>01364
Ну и выкинул код. Это ж просто. В этом и суть хорошего кода
5 2601461
Джавадебилы смачно соснули с проглотом.
6 2602118
Что лучше для WPF в качестве хранения настроек: json или xaml?
xaml работает из коробки и можно заюзать прям Application.xaml, создающийся по-умолчанию. А json это больше для веб и asp.net.

Я видел как в ридер джейсона пихали класс и он как-то сам автоматом заполнялся. Это что-то из разряда сериализации?
7 2602311
>>02118
смешались люди кони огурцы
xaml это не xml и с жсоном сравнивать нельзя

храни настройки как душе угодно.
8 2602553
>>02311

>не xml и с жсоном сравнивать нельзя


я сделал опечатку. Почему нельзя сравнивать?
9 2602581
>>02553
не было никакой опечатки ибо ты упомянул Application.xaml (который на деле App.xaml)

Нельзя сравнивать потому что xaml не является форматом данных. Это как спрашивать "в чем лучше хранить конфиг - в html или в json"
10 2602619
>>02118
XAML (eXtensible Application Markup Language) - язык разметки, используемый для инициализации объектов в технологиях на платформе .NET.

Конфиги храни в json. Используй newtonsoft json из nuget.
11 2602623
>>02619
зачем использовать эту либу, если в дотнете уже есть искаропочное решение?

да, ньютон мощнее по фичам....но это же просто конфиг.
12 2602627
>>02623
Хз, я привык нютон использовать. Но в целом может и дефолтный парсер использовать. Не знаю у него можно отключить регистр при парсинге полей? Можно ли для дебага вывести json в виде отформатированной строки.
13 2602646
>>02627
конечно.

new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = true,
WriteIndented = true
}
14 2602658
>>02581
На SO я видел ответ типа "не заморачивайся с джейсонами, храни настройки Application.xaml", но там выглядело как словарь, и чтобы получить свойство, нужно было ввести текстовый ключ. Т.е. уже это выглядит как неудобная хрень по сравнению с десериализацией в готовенький класс.

>в чем лучше хранить конфиг - в html или в json"


Я имел ввиду контекст удобства работы. Мб какой-то парсер имеет ограничения или еще что, или что-то делается одной левой пяткой.
15 2602805
>>2601822 →
Так это реальный кейс как раз с завода, чел.
Подключена куча устройств по всяким модбасам, хуясам, snmp, mqtt, куча хуйни через один модем который к ком-порту подключен. В среднем на объекте - 100-200к всяких устройств, это через которые идет опрос, к ним еще могут быть куча подключены, нужно получать данные со всего этого частотой не реже 1 секунды на каждое конечное. Нужно управлять этим делом и т.д.
Так вот. Если ты ставишь "архитектуру" выше стабильности работы и этих самых секунд- ты идешь нахуй. Это просто.
Попробуй, блин, добиться этого, а потом покажи, как будешь через PLC, COM, радио - делать абстрактне запросы, к абстрактным устройствам с абстратными чтецами.
16 2602902
>>02805
ничего этакого ты не описал, самая обычная задача где ничего не мешает архитектурить. Ну или хз что ты подразумеваешь под словом архитектура.

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



Я перечитал задачу. она?
"Система опроса с очередями. Логика была простой: устройство - воркер, воркер пытается опросить устройство, сохраняет результат опроса в базу. Все изначально просто - по TCP общаемся без особых проблем.
Ок. Все норм. 10к потоков спокойно опрашивают че там надо.
Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.
Давай, объясняй, как твой DI поможет решить проблему того, что нельзя пытаться открыть из разных потоков один и тот же COM-порт. "

DI решает проблему "не нужно ручками фабрики писать". Для одного конкретного случая это "ну зачем", но приложение обычно куда больше и количество РАЗВЕСТИТЫХ new ЧтоТо(new "nj...) прилично так растет и если все собрать в класс SuperFactory, то там будет много строчек. И при наведении там порядка получишь то, что за тебя сгенерит DI. Правда DI еще даст менеджмент временем жизни.

А если вопрос стоит "ну и как тут сделать с абстракциями" - ну тоже просто. общий воркер, IDevice и куча реализаций для каждого девайса. из разных потоков нельзя открыть - ну а как ты решаешь этот вопрос. вот тут так же. Архитектура не решает алгоритмы - она позволяет сделать код чище (чтобы ты работал с более высокими абстракциями), упростить сопровождение (добавление нового устройства ничего не сломает и возможно даже не нужно будет переписать ни строчки старого кода)

каждый ConcreteDevice не живет в вакууме. Есть какой нибудь контекст, который с ним ассоциируется, а уж там может быть общий семафор для ограничения конкурентного доступа, и контекст синхронизации для того чтобы в одном потоке жить. Ну или запилить "точки доступа" через которые и будут опрашиваться девайсы и уж там будет вся защита от толкотни и многопотока. И про конкретную особенность работы с конкретным физ девайсом будет знать только сам класс ConcreteDevice и более никто. Как бы системе похер COM порт там или баба зина - ей хватает знания "нужно выполнять в том же потоке и плевать кто это". Воркеру тоже похер - он получает данные и передает их бд.
16 2602902
>>02805
ничего этакого ты не описал, самая обычная задача где ничего не мешает архитектурить. Ну или хз что ты подразумеваешь под словом архитектура.

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



Я перечитал задачу. она?
"Система опроса с очередями. Логика была простой: устройство - воркер, воркер пытается опросить устройство, сохраняет результат опроса в базу. Все изначально просто - по TCP общаемся без особых проблем.
Ок. Все норм. 10к потоков спокойно опрашивают че там надо.
Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.
Давай, объясняй, как твой DI поможет решить проблему того, что нельзя пытаться открыть из разных потоков один и тот же COM-порт. "

DI решает проблему "не нужно ручками фабрики писать". Для одного конкретного случая это "ну зачем", но приложение обычно куда больше и количество РАЗВЕСТИТЫХ new ЧтоТо(new "nj...) прилично так растет и если все собрать в класс SuperFactory, то там будет много строчек. И при наведении там порядка получишь то, что за тебя сгенерит DI. Правда DI еще даст менеджмент временем жизни.

А если вопрос стоит "ну и как тут сделать с абстракциями" - ну тоже просто. общий воркер, IDevice и куча реализаций для каждого девайса. из разных потоков нельзя открыть - ну а как ты решаешь этот вопрос. вот тут так же. Архитектура не решает алгоритмы - она позволяет сделать код чище (чтобы ты работал с более высокими абстракциями), упростить сопровождение (добавление нового устройства ничего не сломает и возможно даже не нужно будет переписать ни строчки старого кода)

каждый ConcreteDevice не живет в вакууме. Есть какой нибудь контекст, который с ним ассоциируется, а уж там может быть общий семафор для ограничения конкурентного доступа, и контекст синхронизации для того чтобы в одном потоке жить. Ну или запилить "точки доступа" через которые и будут опрашиваться девайсы и уж там будет вся защита от толкотни и многопотока. И про конкретную особенность работы с конкретным физ девайсом будет знать только сам класс ConcreteDevice и более никто. Как бы системе похер COM порт там или баба зина - ей хватает знания "нужно выполнять в том же потоке и плевать кто это". Воркеру тоже похер - он получает данные и передает их бд.
17 2602930
>>02658

Ничего ограничений не имеет. Кому что нравится. Студия поддерживает app.config где ты в редакторе набацал и она сама за тебя классы сгенерит. Ну и на себя возьмет разделение по юзерам. формат там хмл и руками править его ну нах. В общем то это для случаев когда конфиг редактируется в самом приложении.

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

Аналогично жсоны, ямлы, томлы - есть сериализаторы, ими читай, сохраняй. чуть проще чем с ини ведь сериализатор сразу может выдать граф объектов.

Решение от мелких, то которое в новом асп - ну это классика, читаем многие файлы разных форматом, мержим их, мержим с переменными окружения и бац можем превратить в объекты а-ля десериализация жсон. для случаев когда конфиги правят именно ручками и они ридонли. ну и да - раз нет прямого чтения жсона то и не работают конвертеры (ниудобна)

Так что бери что хочешь. Ну да, кроме первого решения тебе придется ручками накодить классы (ну или сгенерить из жсона - есть такие генераторы) ну и написать много гетсет тупых чтобы поддерживала INPC, ну а свой ConfigurationManager это и в яслях напишут.
image1,7 Мб, 1536x864
18 2602943
Шарпаны, когда начнём делать игры на Unity??? Долой энтерпрайз рабство!
19 2602945
Слушайте, а в консольном приложении .NET можно использовать EF Core? Всё подключил, но при попытке написания ApplicationDbContext ничего не происходит. Просто весит ошибка, что нет такой команды, при этом через using подключил всё
20 2602949
>>02945
Можно конечно. Правда это ж EF - пожиратель памяти, но типа удобство (кому то)
21 2602950
>>02949
Блять блин, опять что-то сломалось. Или я как-то сломал. Попозже пересоздам проект, мб опять что-то неправильно выбрал
22 2602960
Существуют ли учебные материалы для вката в мл на дотнете?
23 2602981
>>01326 (OP)
Xamarin - норм тема, или лучше для проги на телефоны использовать более подходящие языки (Java/Kotlin)?
24 2602992
>>02981
Если "норм тема" измеряется количеством вакансий, то нет.
25 2602997
>>02992
Скорее удобством и возможностями
26 2602998
>>02992
Скорее удобством и возможностями
.png232 Кб, 1920x1050
27 2603013
>>02945
Можно!
28 2603018
>>03013
ну походу у меня что-то поломалась в проекте
29 2603023
>>03013
Бляяя опять ты
30 2603024
>>03018
Посмотри файлик проекта. Там должно быть что-то в духе:

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.2" />
</ItemGroup>
>>03023
В смысле опять? Я тут с вами всегда.
изображение.png15 Кб, 765x66
31 2603032
>>03024
Это я уже смотрел - всё на месте. Ещё установил EF core в другой проект, тоже консольный и тоже не работает. Чё за параша
32 2603039
>>03032
А restore для нугетов делал? Целевой фреймворк нужной версии?
33 2603043
>>03032
>>02945
Ну и вообще. Просто попробуй по гайду https://learn.microsoft.com/ru-ru/ef/core/get-started/overview/first-app?tabs=netcore-cli
Потом посмотри, чем у тебя отличается.
34 2603054
>>03043
щас посомтрю. Просто на asp core всё работает, а на консолке что-то не пашет
35 2603065
>>03043
Кажись нашёл в чем проблема. Я создаю обычное .NET, а нужно .NET Core, но у меня его нет в списке
36 2603069
>>03065
Если ты про последние версии, котрые от 5 и выше. То теперь просто Core решили больше не писать, чтобы не путать людей.
Потому, теперь у нас есть:
.Net Framework
.Net Standard
.Net Core
И просто
.NET, который является Core просто без слова Core
изображение.png75 Кб, 849x529
37 2603088
>>03069
Кароч у меня жопа сгорела))))) Завтра переустановлю Visual Studio. Ибо хз, что тут делать
38 2603101
>>03088
При этом, когда пишу любую команду из EF ничего не работает. Пишет, что отсутсвует ссылка на сборку при том, что она есть
39 2603174
>>03101
У меня так документ с кодом не видит документ с xaml, как будто второго не существует. Имеется ввиду два partial документа. Хз как это править, приходится удалять .vs и тогда пересобирается норм.

Мне бесит, что студия порой сама принимает решение и хер ты че ей объяснишь. На какой-то божьей сопле это все крепится.
40 2603175
>>03174
А еще студия может с нихуя начать ругаться на комментарии в xaml, пишет, что содержатся запрещенные на территории РФ недопустимые символы. Фиксится пересозданием нового документа и копипастингом содержимого.
41 2603224
>>03088
Какая версия студии у тебя?
42 2603410
Посоны, а где инициализировать вложенный класс, который просто содержит свойства, прямо в конструкторе? Но это же нарушит Dependency Inversion, а подавать его из фабрики - это какая-то хуйня.
43 2603575
>>03410
Не заёбывайся, делай как проще.
44 2603860
ребят как сделать так, чтобы запросы на мой кастомный домен редиректились на мой azure app service? При этом мой ажур сервис мог получать редиректы только с мого конкретного кастомного домена, и на прямую или через редиректы с других доменов к нему обратиться было нельзя
45 2604296
>>03860
С доменчика сделать запрос к азуре? А чтобы другие не могли щемисться заведи секретный ключ, который азура будет чекать при получении запроса.
46 2604396
Как сделать параметр в Swagger опциональным?
Скрины запроса в сваггере и скрин контроллера
47 2604488
>>04421 (Del)

> Может есть у кого ссылки интересные?


Нужно побольше информации о Unity. Он сейчас очень сильно продвигает c# в геймдеве.
48 2604518
>>04488
Может быть ты вернешься в экстрим цоде со своим мемчиком про юнити?
49 2604629
После разморозки резюме 3 недели назад создается впечатление, что новые в вакансии в .net только когда один из работающих разрабов пускает себе пулю в башку.
50 2604721
ДЖАВА ГОРАЗДО ЛУЧШЕ, ЧЕМ ШАРП
51 2604738
>>04721
Ты не в ту сторону воюешь.
52 2604757
>>04518

> со своим мемчиком


Какие ещё мемы? Тебе 10 лет что ли?
53 2604761
>>04757
Юнити нахуй никому не всрался.
Стикер255 Кб, 512x512
54 2604808
А теперь главный вопрос в WPF. Вот я хочу сделать окно с опциями, где предлагаю пользователю сменить цвет фона UI.

Даже если я устанавливаю биндинг как DynamicResource, то чтобы поменять цвет, я должен обратиться к ресурсу конкретного элемента, навроде this.Resources("MyButtonColor") = Colors.Orange;. И если у меня 100500 окон, я должен пройтись по всем окнам и у каждого отредактировать ресурсы. Потому что я не знаю как мне влезть в оригинальный файл ресурсов и поменять значение там. Все что я могу — это создать новый экземпляр ресурсов.

Даже та тема с SharedResourceDictionary проблемы не решает. Все что я нашел в сети: а нахуй тебе это нужно? Создавай еще один набор ресурсов. Что, реально в 2к23м можно оперировать только темами, но нельзя указать конкретный цвет?

Последняя моя идея заключается в том, что раз у меня MVVM, то создать экземпляр ResourceDictionary во вьюмодели, а потом биндить его на все окна. Хз как это будет работать, но есть прям отдаленные участки, куда рука вьюмодели по любому не дотягивается — придется передавать по цепочке как Owner Window.
55 2604826
>>04808
У тебя хроническое словарно-ресурсное заболевание. Будь твоя воля - ты бы и логику и базу данных в словарь ресурсов запихал.

у тебя есть конфиг любого вида - в нем хранишь цвет, все настраивамое биндится к этому конфигу. Изменение цвета в конфиге вызовет INPC биндингов и значение изменится.
Заодно и хранить в файлике можно
56 2604836
>>03013

> пик


Кривой аддон для анимедебилов не умеет в масштабирование. Классика.
57 2604838
>>04808
С вьюмоделью не прокатит, она поступает позже инициализации элемента.

>>04826

>Будь твоя воля - ты бы и логику и базу данных в словарь ресурсов запихал.


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

>у тебя есть конфиг любого вида - в нем хранишь цвет


Ок, у меня есть стиль кнопки. Как стиль получит цвет из конфига?
58 2604880
>>04838

>Даже та тема с SharedResourceDictionary проблемы не решает


ну вообще то позволяет добраться до всех словарей. у словаря можно менять данные. как об изменении уведомлять всех - хз. я словари не редактирую.

>Как стиль получит цвет из конфига?


<Setter Property="Background" Value="{x:Statin Settings.UI.FooBarColor}" />
или Binding если это INPC конфиг
59 2604888
>>04826
>>04838
Короче, для теста создал статический класс с базовыми цветами, так сказать.

Далее в ресурсах я свой список базовых кистей сбиндил по типу
<SolidColorBrush x:Key='ActiveColor' Color='{Binding Source={x:Static L:BaseColorsSource.ActiveColor}}' />

Были небольшие траблы с биндингом к статическим свойствам. Теперь достаточно изменить свойства до запуска окон, и все обновится. Над ток все это согласовать с конфигом.
60 2604889
>>04880
Да, спасибо, так и сделал. Можно и без биндинга? Норм.
Мне надо только менять на стадии загрузки.
61 2604915
>>04889

>Можно и без биндинга?


Вообще тут смотреть нужно. Без биндинга по идее не будет изменений трекать после создания стиля (хотя и с биндингами ну будет только стиль меняться, а будут ли элементы где стиль применен - хз). Также еще если биндинг не OneTime и не INPC, то будет утечка. Но это ж если к свойству, а тут биндинг вроде ко всему объекту сразу.
62 2604933
>>04915

>если биндинг не OneTime


А какой тогда прок, если суть биндингов в реализации изменений в риалтайме?

У меня такая структура получилась:
- Статическое свойство хранит в себе экземпляр INPC-класса со списком всех базовых цветов.
- Далее ResourceDictionary имеет список экземпляров кистей, которые биндят цвета.
- А стили уже биндят эти экземпляры кистей. Я как-то для себя условился, что я не буду шатать экземпляры.
63 2604945
>>04933
Кстати, у меня и без DynamicResource произошло обновление цветов.
Ну понятно, что я меняю цвет в экземпляре одной и той же кисти, но кто инициирует перерисовку? И для чего тогда нужен DynamicResource?
64 2604956
>>04396
Чтобы оно было не обязательным - нужно указать значение по умолчанию.
65 2604963
>>04933

>А какой тогда прок, если суть биндингов в реализации изменений в риалтайме?


если ты делаешь обновляемый биндинг не к DP или INPC, то у тебя будет утечка памяти. Вместо подписки на PropertyChanged он там творит магию с PropertyDescriptor чтобы следить за изменениями и получается жесткая ссылка

А вот так
{Binding Source={x:Static L:BaseColorsSource.ActiveColor}}
получается биндинг на сам объект и как бы свойства нет и я честно не знаю как он тут следит за обновлениями

Это ж не
{Binding ActiveColor Source={x:Static L:BaseColorsSource}}
где все понятно.
66 2605003
>>04963

>если ты делаешь обновляемый биндинг не к DP или INPC, то у тебя будет утечка памяти. Вместо подписки на PropertyChanged он там творит магию с PropertyDescriptor чтобы следить за изменениями и получается жесткая ссылка



Ах, вот оно че? Обычно мне не дают привязать к свойству, если оно не DP или INPC, а словарь даже не задал вопросов.

>{Binding Source={x:Static L:BaseColorsSource.ActiveColor}}


>{Binding ActiveColor Source={x:Static L:BaseColorsSource}}


Отличие есть в VisualBasic. Дело в том, что там отсутствуют статические классы в принципе, можно делать только статические методы, поля и свойства.
Есть, конечно, Module, но это специфический тип.

Поэтому если статическим является ActiveColor, то правильным будет первый вариант, а второй выдаст ошибку.
67 2605007
>>05003
вместо спойлера выделил болдом
68 2605037
Кто нибудь тут настраивал CI/CD для своей конторы?
Я не прошу советов. Я просто поныть хочу.
Вот чому это так сложно-то? Вообще, в такие моменты возникает мысль, что проще самому сделать. Пиздец.
Вот простая связка, гит-нексус-дрон, казалось бы. Пиздец сколько попоболи это все сделао. А ведь нужно еще чтобы масштабироваться.
Я просто хуею. Как же привык к тому, что у майков все из студии делается. Пиздец как не весело - ебаться с сертификатами, ебаться с конфигами жавовской хуйни, ебаться с безопасниками, которые втихаря подсирают, а узнаешь про это когда все перепробовал, и все вроде верно, а потом - ой, мы на тебе новую систему проверям))).
А так - вы няши. Я вас люблю. Надеюсь, вам - никогда не придется с этим ебаться самим, а прийдете на все готовое.
69 2605103
Пацы, нужно хранить информацию о покупке. И там есть такая информация: тип валюты в ISO формате и количество валюты в единицах. Как эти поля правильно назвать:

- IsoCurrencyCode
- А вот тут как: CurrencyAmount | PriceInCents | PriceInCurrency
70 2605131
>>05103
У тебя в приложении юзаются какие-нибудь другие коды валют, кроме ISO? Если нет, достаточно CurrencyCode, без лишних уточнений, что ISO.
Единица какой-то валюты - это НЕ разменные денежные единицы, т.е. никаких центов, копеек и пенни, только доллары, рубли и фунты. Разменные единицы обозначаются дробной частью с точностью до двух знаков после запятой, там, понятное дело, никаких флоатов и даблов, только decimal.
Количество называй как хочешь, хоть CurrencyPrice, хоть CurrencyAmount, хоть CurrencySum.
image131 Кб, 460x396
71 2605244
2023-02-1016-53-14.png11 Кб, 349x297
72 2606287
Чет ваш жысон не такой уж и компактный.
Попытался сериализовать Color и ожидал на выходе HEX, вроде #FF34FF0C или 0xFF34FF0C (в идеале int, но и стринг сойдет)

В итоге он мне забубенил пикрилейтед, где каждый канал ARGB записывается в отдельный параметр, да еще зачем-то записал ScR и ему подобное, что является представлением того же R, к примеру.

Т.е. у макрософтовского сериализатора нет анализа своих же типов, для него Color — это какой-то нонейм. Ну и как адекватно с этим работать?
73 2606331
>>06287
Использовать кастомный конвертер (с) ваш кэп
74 2606334
>>06287
Итак, гуглим JsonConverter
Перекидывает на MSDN
Так что там?
Пишут "Выберите версию .NET"
Ага. Выбираем .Net6
Так шо там ебана? Экземпл, ну давайте скопируем
Ага, четам? Один из параметров имеет тип Utf8JsonReader
@
ОшибкаBC30668"Utf8JsonReader" является устаревшим: "Types with embedded references are not supported in this version of your compiler."

Спасибо .Net6
75 2606341
>>06331
Там говной воняет. Ща поищу еще.
76 2606350
>>06341
у тебя горячка

>где каждый канал ARGB записывается в отдельный параметр


и правильно сделал. он сериализовал поля, что в общем то сериализаторы обычно и делают. ваш кэп

>Т.е. у макрософтовского сериализатора нет анализа своих же типов


как раз анализ и позволяет сериализовать. другое дело нет встроенного конвертера для Color по очевидной причине - этот тип не встроенный, а сериализатор не должен тянуть за собой зависимость от всего на свете. (мелкие даже DataMember не поддерживают именно по этой причине)

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

но ты поищи поищи
2023-02-1017-30-36.png52 Кб, 1051x887
77 2606354
>>06341
Ага, 2020 год. Ясно.
Как же хорошо, когда НЕ работает из коробки вот уже 3 год.
78 2606357
>>06354
нууу тот кто выбрал визуал бейсик с его синтаксисом...очевидно любит сложности.
image.png156 Кб, 600x463
Пантеон 79 2606404
Вкатываюсь в шарпы
Го подтверждать скилы друг друга на ликдине
https://www.linkedin.com/in/artur-ilinyh/
80 2606420
>>06357
Короче, все примеры касательно джейсона для бейсика юзают Newtonsoft.

>нууу тот кто выбрал визуал бейсик с его синтаксисом


При чем тут синтаксис? Просто майкрософт забили хуй.

Вот и пришли к выводу, что выбрать. Посмотрю наскольк грузная эта либа, и наверно начну рассматривать вариант с xml.
81 2606429
>>06420

>При чем тут синтаксис?


он уродский. и ладно бы не было альтернатив, но так шарп же
82 2606452
>>06429

>он уродский


В шарпе тоже есть уродства, так что я на эти языки смотрю как на сорта говна.
83 2606513
А вообще.
Я тут погорел с того, что CI/CD сложно настраивать. И у меня мысля возникал.
Че если я просто на гитхабе залью dokcer-compose того что получилось, чтобы 1. Потом можно самому было брать. 2. Чтобы другие меньше страдали.
Связка какая: Gitea, Nexus Repository, Drone CI, Nginx. Хотя если никому не всралось - то и тратить время не буду. На работе - конфиги-то есть.
84 2606516
Уже весь инет перерыл, аноны, подскажите, как в uwp сделать анимацию как в navigationview? С голубым указателем, который выскакивает то снизу, то сверху в зависимости от позиции предыдущего выбранного элемента.
2023-02-1020-26-33.png13 Кб, 302x321
85 2606621
Кек. Newtonsoft.Json из коробки распознает Color и пишет hex. А еще можно пометить свойство, что это массив или словарь, пока искал свою проблему видел, что у Text.Json и для этого надо писать свой конвертер.
86 2606976
>>06621
никто не спорит чть ньютонсофт более богатый по фичам
потому и более тяжелый и более медленный и более срет в душу GC

тут уж кому что важнее - фичи или скорость.
87 2607167
>>06420

>Просто майкрософт забили хуй.


Ну таки да. Они его развивают по инерции и по принципу, чтобы было хоть что-то. Просто народ настолько уже привык к ньютонсофту, что многие родной майковский даже никогда и не пробовали за всю жизнь.
Они просто подождут еще несколько лет, купят его себе и встроят заместо своего собственного.
88 2607182
>>07167
Чел, майковскую либу разрабатывает автор newtonsoft.
89 2607191
>>06976
На хабре видел обзор. У ньютнсофта и майкрософтовского примерно сопоставимые скорости. Впереди там jet.
90 2607233
>>07191
всех по скорости и по аллокациям всех порвет SpanJson

а так потребление памяти и скорости не равны. не знаю где ты там смотрел.
91 2607360
Правильно ли я понимаю, что для настроек надо хранить дефолтные неизменяемые настройки, и где нибудь в AppData хранить их редактируемую копию.

А в каком месте хранится оригинал? Я вот щас полазил по вским программам и не вижу копий данных в program files
92 2607367
>>07360
Им не обязательно храниться отдельными файлами, можно хоть логикой в коде генерировать.
93 2607726
>>07360

>А в каком месте хранится оригинал?


В том же где хранится твоя мамка.
Извини не удержался.
На самом деле и правда - там где хочешь. Где тебе наиболее удобно их будет менять при необходимости. Я обычно храню в виде дефолтных значений полей самих settings классов.
94 2607863
Пока гуглил про сохранения настроек, увидел такую интересную фишку то ли у IConfiguration, толи еще где,я тогда в голове зафиксировал сей факт и пошел дальше, типа загружается конфиг и если какой-то пунт по каким-то причинам не найден, то он подгружается из дефолтного конфига.

Начал искать эту тему заново, все уперлось в DependencyInjection, начал смотреть про DI, а там нужен паттерн AbstractFactory. Все как снежный ком начинает обрастать сложностями, что навело меня на историю одного товарища, который работал слесарем в одном Мухосранске. Короче там пытаются любую проблему, любую течь решить при помощи деревянного чопика, и когда течь начинает подмывать ранее установленный чопик, в этот чопик вбивают еще один чопик поменьше.

Почему в случае простых простых работяг это называют халтурой и безответственностью, а у программистов и математиков наукой?
95 2607888
Ребят, почему EF Core может не добавлять записи в БД(PosgreSql)? При первом обращении создаётся БД, но когда пытаюсь добавить запись - ничего не происходит. Ошибок никаких нет. По дебагеру отследил, что доходит до команд:
await _db.User.AddAsync(entity);
await _db.SaveChangesAsync();
И всё, ничего не происходит
96 2607894
>>07888

>await _db.User.AddAsync(entity);


>await _db.SaveChangesAsync();


Оберни в try catch посмотри что за исключение.
изображение.png5 Кб, 766x144
97 2607896
>>07894
Ok, а что за внутренне исключение и где его посмотреть?
изображение.png100 Кб, 1507x505
98 2607899
>>07896
Ой, я же просто сообщение вывожу.
Вот полная ошибка
изображение.png100 Кб, 1507x505
99 2607901
>>07896
Ой, я же просто сообщение вывожу.
Вот полная ошибка
100 2607902
>>07899
Насколько я понял, то тут ошибка с датой. Щас пойду переделаю
101 2607906
>>07902
Пофиксил всё вот этой строкой AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
102 2607967
>>07906
теперь скажи нам спасибо. ведь если бы не мы, ты бы ничего и не добился.
103 2608021
Смотрю и логгирование и конфигурации — всё работает через DI. В ASP.net это работает из коробки, а в WPF надо плюс ко всему городить фабрику, чтобы тупо запускать окна при такой системе.
104 2608033
>>08021
И? WPF - легаси говно, в 2023 году никому оно не нужно.
105 2608063
>>08033
Это конечно хорошо, но давай мы будем подбирать инструмент под задачи, а не выдумывать задачи под инструмент. Прямо щас мне нужно сделать плагин для десктопного софта.
106 2608099
>>08021
Какая у тебя каша в голове просто капец. На ровном месте находишь проблемы. НЕТ никаких рамок ни в WPF (который типа легаси) ни в asp.net по логгированию и конфигу. Тебе может быть предложено решение искаропки, но это не значит что "все атас другое сложно".
Если предлагается дефолтное решение - оно не значит лучше. Тот же DI от майков убогий (ни тебе декораторов, ни тебе условий, ни перехвата - НИХРЕНА) и его встроенность только мешает использовать более крутые DI, а решение по конфигу не дает использовать сложные типы в конфиге (кто там про Color жаловался - а вот хрен что он тут сделает без ручного пердолинга), логгинг как бы тоже на любителя ибо все равно прикручивается что то типа Nlog/Serilog. А дефолтный майкологгер даже в файл писать не может (ну да да, файл типа не нужен, ага ага, типа 12 правил ну да нуда))))

Городить ему что то блин надо. WPF это просто окна и биндинги смотрящие на DataContext - и все. Городи КАК УГОДНО.
Можешь взять стандартное решение по конфигу, можешь из ASP.NET (правда оно ридонли же), можешь хоть свое сделать за полчаса там сооружается банальное Load/Save -> Settings.Default.MyProp

Сложнее разве что из за наличия самого UI если тебе нужно красиво аснхронно что то типа IHostedService, ведь нужно же что то пользователю показывать что мол "не висит оно, а штатно запускается или выгружается" при старте и выходе, но опять же WPF тут не причем как бы. UI на то и UI

>>08033
ну вот WINUI типа не легаси, Там что то другое в этом плане? ой нет ). Наверное потому что легасность WPFа в другом. Да и вообще легаси это понятие растяжимое - вон про тот же жсон типа легаси, но вот только его замена явно слабее по фичам. DI от майков тоже слабее - но "жричодали". Просто пошли другим путем, но это не значит что старые пути стали плохие. не стоит забывать про "фатальный недостаток". Как бы те же майки и кнопку пуск убирали, типа она легаси )))))))))
107 2608102
>>07863

>а там нужен паттерн AbstractFactory


Нахуй такие сложности. Используй IOptions и не еби себе мозг.
108 2608105
>>07906
Не, чувак, ты не пофиксил, ты просто подпер свой говнокод костылем и радуешься.
От слова Legacy ничего в твоем межушном нервном узле не зашевелилось? Ну или о том, что везде где это про этот способ пишут, приписывают, что пользоваться этим не стоит и оно нужно исключительно для того, чтобы какой-нибудь совсем старый говнокод не развалился при его обновлении.
Пиздуй читать как правильно хранить дату/время в БД, почему хранить их там в Kind:Local - это ублюдство и как правильно решать такие вопросы в EFCore и в постгресе.
109 2608106
>>08102
1 IOptions тот который в ASP.NET - вообще крайне спорное решение. Противоречит принципу fail fast
2 Там в принципе нет сохранения настроек
110 2608211
>>08099

>ибо все равно прикручивается что то типа Nlog/Serilog


Так они все работают по схеме DI. Мне и нужно для сохранения в файл.

>Городи КАК УГОДНО.


99% туторов по конфигурации и логгированию идут в контексте DI. Но учитывая объем сделанного, проще написать свой логгер и воркер с сеттингами, чем перелопачивать всё под DI.
В моей голове мысль, что раз все юзают через DI, то может не стоит использовать иначе? Примеров масса, с теми же подписками или биндингами, когда игнорирование правил может привести к утечке памяти.

>>08102

>Нахуй такие сложности.


Ну я начал гуглить про DI, естественно большая часть описывается для ASP.net. Я начал искать примеры для WPF, и в одном туторе чел реализует DI и запускает mainWindow. А потом добавляет, мол "если вы захотите запустить из этого окна кучу других окон, то хуй вам. Для этого вы должны реализовать AbstractFactory для всех окон."

Как я понял, при такой системе любой пук оборачивается в сервис и запрашивается у хоста этих сервисов.
111 2608235
>>08211

> Ну я начал гуглить про DI, естественно большая часть описывается для ASP.net. Я начал искать примеры для WPF, и в одном туторе чел реализует DI и запускает mainWindow. А потом добавляет, мол "если вы захотите запустить из этого окна кучу других окон, то хуй вам. Для этого вы должны реализовать AbstractFactory для всех окон."


https://www.youtube.com/live/AkJ52O3cgi0
Шапка для чего?
112 2608245
Раз уж тема зашла про свой собственный логгер. Как там устроен процесс записи в файл? В какой момент идет запись? При каждом запуске условног ометода Log шатается файл, или собирается в буфер и уже при закрытии приложения все сохраняется разом?

Первый вариант очень сильно шатает производительность и при асинхронности не гарантирует правильную последовательность записи событий. Но второй подход может не гарантировать финальную запись, тогда является ли отлов необработанного исключения 100% гарантией записи? Может ли приложение обмякнуть без жидкого пука на последок?
113 2608252
>>08245
А еще при втором подходе засрется память.
114 2608254
>>08235
Этот стрим я видел, да. Я по нему MVVM учил, но весь остальной "мусор" тогда проигнорил. Ща пересмотрю.
115 2608263
>>08245
Все логгеры которые я видел пишут в файл сразу.
Опять же сорцы nlog и serilog есть на гитхабе. Возьми и посмотри как все устроено.

>Может ли приложение обмякнуть без жидкого пука на последок?


Конечно. Свет отключили и прощай все твои логи.
116 2608291
>>08211

>В моей голове мысль, что раз все юзают через DI, то может не стоит использовать иначе?


DI настолько стал стандартом и настолько (относительно) прост, что написание собственной реализации, даже в промышленном коде - это норм. А вот неиспользование DI - вызывает большие вопросы.
2023-02-1212-25-52.png318 Кб, 900x380
117 2608316
>>08235
Это какое-то расширение или так в старых версиях VS было? Я имею ввиду визуализацию цвета кисти в виде полосы. У меня в студии всегда был квадрат слева.
118 2608351
>>08291
Ты бы знал сколько итераций переписывания испытал мой проект за эти полгода — просто потому что я получаю знания по ходу его написания. Но эти переписывания уже выглядят как акт бесконечной дрочки кода. Уместнее так называемое саморазвитие оставить для других проектов.
Это, конечно, мои проблемы.

Хорошо, когда ASP тебя ставит перед фактом на этапе загрузки шаблона, в WPF все более неочевидно.
119 2608355
>>08351

>Хорошо, когда ASP тебя ставит перед фактом на этапе загрузки шаблона, в WPF все более неочевидно.


Зачем ты учишь и то и то?
По моему найти сейчас вакансию, где бы использовались оба фреймворка тот еще квест.
120 2608375
>>08316
Решарпер
121 2608376
>>08355
Я учу только WPF, и профессия у меня другая.
Я вообще десигнер и пишу плагин для своего графического пакета. Формально, я могу забить хер на все эти правила — имею право, но раз начал, то хочется совсем уж не говнокодить.

А начинал я проект с Windows Forms, потом мне понадобилась графика и прозрачный фон — я перешел на WPF, потом когда говнокод разросся, пришлось переписывать на MVVM. Щас гуглю про конфиги и логгирование и упираюсь в DI, которое при гуглении тыкает носом в ASP.
Больше никакой связи с ASP, собсно, и нет.
122 2608418
Приветик.
Вот хочу попробовать сделать приложенице с помощью WPF, но есть вопросик. Вот мне нужно переключенице между вкладочками как, например, в сиклинерчике, ну или в стимчике. Это реализовывается с помощью страничек или по-другому? Просто во всех говногайдиках делают одностраничные приложеница и нихуя не понятно.
123 2608497
>>07967
Спасибо
124 2608502
>>08418

>приложенице


>вопросик


>вкладочками


>стимчике


Второй дизайнер в треде и один анимэшник. Куда делись программисты?

>Это реализовывается с помощью страничек или по-другому?


Тебе краткий путь или долгий?
Краткий: делай как тебе удобно. Ты можешь поместить содержимое куда угодно, хоть в Grid, и даже в кнопку — в этом суть WPF. Есть тонкости, о которых лучше узнать по ходу, чем забивать себе голову сейчас. Page это весьма специфический контрол.

Долгий: скорее всего тебе придется узнать про такие темы, как:
- Bindings, потому что на твоих страницах скорее всего будет куча элементов, которые нужно как-то связать либо между собой, либо с базой данных.
- Паттерн MVVM, чтобы не ебстись с привязкой кучи данных вручную
- XAML Styles, чтобы нарисовать няшные вкладочки.
Потому что вопросик-то у тебя простенький, но за ним спрятаны нюансики.

>Просто во всех говногайдиках делают одностраничные приложеница и нихуя не понятно.


А в гайдиках получше, гайдиков штук десять и все длинной по 4 часа.
Можешь начать https://youtu.be/uMNYu0p3MP4?list=PL-p05fYs48r-HOAA4_5qZfS0rTIka3fgc
Но сперва накидай хотя бы рыбу своего приложеньица.
125 2608524
>>08211

>Так они все работают по схеме DI


чушь. ты должен где то сконфигурить и как то получить там где используешь
в Nlog вообще нет проблем доставить логгер на нужное место

>99% туторов по конфигурации и логгированию идут в контексте DI


элементарно пишется использование на коленке

>что раз все юзают через DI, то может не стоит использовать иначе?


DI удобен как автофабрика. так что почему бы не использовать.
и он прост как валенок. Хотя конечно сидеть на стульях "мы хотим создавать вьюмодели внутри других вьюмоделей и в то же время не иметь там контейнер" сложновато

>>08245
как сконфигуришь логгер так и будет.
126 2608552
>>08524

>элементарно пишется использование на коленке


Но не элементарно интегрируется в существующий проект.

Наверно я пока еще не осознал до конца суть DI. Я видос досмотрю, который анон выше скинул, потмо сделаю выводы.
127 2608563
>>08552
Суть DI ты понимаешь
Тебе сложно использовать контейнер, ведь контейнер не должен быть везде чтобы не быть сервис локатором. И тут в mvvm сложнее, ведь одни вьюмодели порождают другие, те еще свои. И там время жизни разное ведь это не асп где время жизни запрос.

А примеры сплошной примитив.
128 2608587
>>08105
Какой ты вредный, н за совет спасибо. Переделал немного сущность user. Теперь заместо DateTime использую DateOnly, а добавляю так: DateOnly.FromDateTime(DateTime.UtcNow. Теперь работает без той заглушки
129 2608634
>>08587

>Какой ты вредный


Но совет то дал же.

На самом деле в EF можно еще добавить кастомный ValueConverter на уровне контекста, который будет все приходящие ДатыВремя автоматом переводить в Utc перед записью в базу и/или после вытаскивания их оттуда. И тогда вообще забыть о таких заморочек и просто подразумевать, что все что у тебя в коде крутистя всегда в Utc
130 2608695
>>08502

> рыбу


Бля, последний раз слышал это слово в таком значении от своего препода в вузе. Тоже к слову был шарпистом.
131 2608702
>>08695
А как надо писать, чтобы выглядеть современно? "Накидай рыбов"?
132 2608710
>>08702
Можно просто написать скелет. Ясно и понятно.
изображение.png9 Кб, 407x190
133 2608770
Здрасьте, вижуал студия на винде словила заеб - при создании консольного проекта (.net 6/7) создает папку и не загружает решения. В папке проекта есть только файл Program.cs и ProjectName.csproj. При попытке загрузить .csproj выдает пикрил.
В интернете на вскидку пока ничего не нашел по делу. Восстановление студии в инсталере не помогло. Инстанс студии загружал с админа. У кого-то подобное было?
134 2608852
>>08770
Список установленных SDK покажи
135 2608941
Посмотрел код community.toolkit для uwp, а там лютейший говнокод. Не ожидал от майков.
136 2608944
>>08941
Майки - прославленные говнокодеры.
137 2608951
>>08941
А ты всегда как на выставку пишешь? То что тебе не нравится необязательно говнокод. Если
0. Работает
1. Читабельно
2. Поддерживается
3. Развивается
то это просто обычный код, а не для того чтобы дядя Боб похвалил или очередные хипстеры, в зависимости от того какая у тебя референтная группа.
138 2608975
>>08951

> 0. Работает


Работает то работает, но нет базовых функций, давно реализованных в сторонних либах.

> 1. Читабельно


Мимо. Почти нет комментов, функции внутри методов и тд. Пиздос полный.

> 2. Поддерживается


Переменные с именами V, U, v, u...

> 3. Развивается


Последняя обнова в ноябре 21 года... Для малейшего изменения логики приходится все переписывать с нуля, чем я сейчас и занят.
139 2609105
В DI я не понял одного: а кто главный? кто создает движуху? Кто инициирует чтение данных из файла во вьюмодель, кто запускает окно и передает вьюмодель интерфейсу?
140 2609123
>>09105
Сам фреймворк, очевидно.
141 2609138
Деды, глядите, что там хипстеры напридумывали:
https://www.youtube.com/watch?v=IXRGa5m-Lbo
142 2609158
>>09123
А это кто такой?
143 2609187
>>09158
ASP и точка.
144 2609197

>у студента что-то не работает


>DI оказывается дотационный


>премудрости MVVM


>разметка окна в WPF



Не перестаю проигрывать с этих животрепещущих тем. И после этого "джава хуевая, потому что медленно развивается и там сплошное легаси". Ага, то ли дело у нас, у шарпистов: ехало мввм через впф. Хорошо, хоть фанатам формочек хватает самоиронии, чтобы не скатывать тред в обсуждение премудростей биндинга лист бокса к коллекции объектов.
145 2609203
>>09187
>>09197
Ты такой охуенный, как и джава, но почему ты здесь? Разве ты не тратишь время на серьезные задачи?
146 2609205
>>09203
Выходные.
147 2609212
>>09205
Выходные только у быдла. Смотри, а то опустишься до формочек.
148 2609214
>>09212
Какие проблемы с формочками?
149 2609230
>>09214
Разве это достойно серьезной задаче? Кстати, какие задачи решают настоящие джависты?
150 2609239
>>09230
Все бэкендеры делают одно и то же: грузят жсоны в базу.
151 2609240
>>09105
Так, вроде начинаю въезжать. Каждый сервис требует набор каких-то других сервисов, поэтому они начнут существовать как только это кому-то понадобится. Если окну нужны данные из файла, то он запросит сервис данных и тот инициализируется.
152 2609241
>>09230
Сидят итт под кроватью и тролят шарпистов?
153 2609244
>>09240
Короче, тут главное на стадии инициализации четко обозначать какие еще сервисы нужны конкретному сервису. Но чет мне подсказывает, что очень легко зафакапиться.

К примеру у меня пока нет никакой защиты от того, что ресурсы стилей начнут тащить данные базовых цветов из статического класса (как я упоминал раньше). А тащить он начнет как только загрузится первое окно.

Наверно этот класс надо сделать еще одним сервисом, который требует сеттинги. Легко сказать, но это статический класс, а ресурсы лезут прямо в свойства этого класса. Никакой инициализации по сути там и нет.
154 2609245
>>09241
Разве это достойно — бисер перед свиньями метать?
Стикер255 Кб, 512x509
155 2609249
>>09197
Почему ты проецируешь лично мои локальные проблемы на всех шарпистов? Ты ебанутый?
156 2609308
>>08502
Спасибо за ответ.

> MVVM


На первый взгляд выглядит как просто усложнение кода. Мб, если столкнуться с проблемами, которые решает мввм, то я передумаю. Но сейчас, те плюсы, которые дает этот паттерн, мне особо не нужны. Мне, по сути, требуется 5 вкладок в одном окне, по которым можно переходить по кнопкам из шапки. Что-то вроде tabcontrol, но его я использовать не хочу. Пока что думаю страницы впихивать во фрейм.
157 2609329
>>09244

>Никакой инициализации по сути там и нет.


Статический конструктор?
158 2609351
>>09105
MVVM фреймворк или ты сам. Сделать в App.cs new MainWindow() - а почему нет.

>>09240

>Если окну нужны данные из файла,


окну не должны быть нужны из файла, они нужны вьюмодели, которая и содержит данные для отображения. вьюмодель же, в свою очередь, попросит их у модели)
159 2609504
>>08418
TabControl, где каждая вкладка View. И mvvm не забудь.
2023-02-1312-14-36.png930 Кб, 807x503
160 2609550
>>09308

>На первый взгляд выглядит как просто усложнение кода.


Зависит от сложности контента на твоих страницах. Если там полторы кнопки, то не нужно, а если у тебя куча данных, особенно списки всякие, да еще и общие — чтобы изменив в одном месте автоматом поменялось в другом, то без MVVM будешь городить пикрилейтед.

>Пока что думаю страницы впихивать во фрейм.


Фрейм изолирует контент. Опять же, если ты не будешь юзать биндинги, а делать в лоб, то разницы вообще никакой. Тот же Grid делает ровно тоже самое, разве что там нет стрелочек навигации, которые ты первым делом и отключишь.
161 2609580
>>09308
Не усложнение, а структуризацию
Даже без MVVM крайне глупо закатывать солнце вручную и не юзать биндинг
а уж поверх биндинга это логическая надстройка как и MVC, то есть "где что лежит"

по факту даже в мелких приложухах часто проще добавить классы с INPC, а не делать спагетти. А потом родится и класс ViewModelBase и RelayCommand что проще копирнуть в новый проект чем писать по старому

Даже если у тебя один таб контрол - даже там удобнее.
1123.jpg73 Кб, 1200x742
162 2609599
>>09351

>окну не должны быть нужны из файла


Да не, у меня там менеджер окон (в новых реалиях будем называть это сервисом окон). Раньше он при инициализации обращался к сервису чтения данных и получал экземпляр вьюмодели, а потом распихивал её в датаконтексты окон.

Пикрил — схема моего проекта.
Есть три вьюмодели. Если проводить параллели с Visual Studio, то главная вюмодель — решение. Внутри решения список дочерних вьюмоделей — проектов. Внутри каждого проекта есть дочерняя вьюмодель в виде иерархии элементов.

Пока что у меня вьюмодели больше выглядят как контейнер данных, а не сервис.
163 2609633
>>09308

>На первый взгляд выглядит как просто усложнение кода



На самом деле, упрощение поддержки за счет отсутствия прямой зависимости между моделью и вьюхой (ну и небольшой профит в предсказуемости связей).
Достаточно актуальный на сегодня кейс: представь, что тебе нужно сделать с проектом (который изначально на WPF), чтобы он заработал на Linux, потому что немалая часть заказчиков начала перекатываться. С MVVM ты заменяешь слой вьюх и, если не повезет, придется поправить биндинги в VM
164 2609690
>>09599
главное чтобы твоя логика не была в code-behind окон
и окна напрямую не лезли в модель, а через вьюмодель
(вид не должен знать чего как - он транслирует хотелку вьюмодели и отрисовывает изменение состояния). Вот и весь MVVM
очень простая концепция.

и ты правильно описываешь параллеи
и так то вьюмодели больше и есть контейнер данных для отображения. Вообще конечно во вьюмоделях и команды есть, но по хорошему они должны быть как тонкие контроллеры. Или даже отдельно сделать контроллеры ибо вьюмодели очень любят быть жирными из-за этого
165 2609758
Всем ку, подскажите, пожалуйста, почему я не могу получить лист, который закешировал с помощью IMemoryCache. В том классе, где производилось кеширование - данные могу получить, а в других классах не могу. Подозреваю, что я что-то не так делаю или что-то не так понял. На первом скрине кеширую и получаю данные, а на втором уже пытаюсь получить данные из Program.cs. Собственно, получаю нуль, ибо там ничего нет, почему так?
166 2609760
>>09758
ого, удачно ошибка замазала телеграм токен
167 2609864
Такая тема:
Необходимо подключить консольное приложение (как пример), к Prometheus, чтобы тот забирал метрики и выдавал, условно, "температура". Знаю, что такое можно делать с ASP.Net через подключение соответствующих библиотек, потом давать доступ в конфиг прометеусу и он уже будет сам все подсасывать. Но проблема заключается в том, что начальник хочет посылать топики в MSQTT, тот в свою очередь (как я понял) в прометеус. Я не совсем понимаю, как это реализовать, в инете говорят про умный дом, либо esp'шки всякие.
В моем же случае, это: Стенд -> запросы на сбор конкретных метрик -> MSQTT -> Prometheus.
Может кто знает толковую статью или пример проекта? Буду очень благодарен. Если что-то не ясно пояснил - извиняюсь заранее, сам с трудом понимаю, что от меня хотят и что учить.
168 2609986
>>09758
Ты пишешь кеш в MemoryCache который создал через AddMemoryCache() и прокинул в services, а получить пытаешься из нового: считай записал в один Dictionary, а читаешь из другого.

Тебе надо либо через GetService получить этот конкретный мемори кэш там же где ты пишешь, либо в сервис эту логику вынести и автоматом получать через конструктор как на пике 1.
temple-photo.jpg36 Кб, 621x621
169 2610100
>>08852
Установленные sdk вообще не выводились, хотя я уже руками качал .net sdk и ставил. Короче оказалось что при установке в системные переменные среды в Path оно записывает два пути к х86 и затем к x64 версии. Нужно было х64 поднять приоритетом вверх и ребутнуть пеку. Спасибо анон.
170 2610169
как делать стартапы на ASP.NET и MAUI?
171 2610173
>>10169
берешь идею, реализовываешь на какой-то дотнет технологии, деплоишь на хостинге, продвигаешь в поисковиках, монетизируешь, получаешь деньги
172 2610191
>>10169
Никак, Startup.cs больше нет в 7 дотнете.
uKNxZmt4L-W410e4C5BmEw.jpg58 Кб, 1600x900
173 2610245
174 2610309
Объясните как чел делает стиль для Window и у него не возникает ошибки? Ведь применяет он стиль не к Window, а к производному классу CV19.TestWindow

У меня была ровно та же проблема и на SO писали, что надо переопределять стиль под новосозданный класс. А у автора даже Path в свойстве Style прописался и не задал вопросов.
175 2610318
>>10309
А, ясно это не будет работать только для применения стиля по типу, а не по ключу (хотя мне казалось, что я так пробовал).
176 2610378
>>09550

>Фрейм изолирует контент. Опять же, если ты не будешь юзать биндинги, а делать в лоб, то разницы вообще никакой. Тот же Grid делает ровно тоже самое


А как в таком случае? Делать много гридов в одном окне и просто их скрывать? Да, я тупой, это можно не сообщать.
6a97628144034eac8f320d60ef256ac9.jpg175 Кб, 1920x1080
177 2610399
>>10378

>Да, я тупой


Ты не тупой, просто неопытный. Все задавали ровно те же вопросы.

>Делать много гридов в одном окне и просто их скрывать?


Во-первых, в окне ты можешь создать только один элемент. Каждый UI-элемент может (должен) содержать в себе контент в виде других элементов, но есть те, которые могут содержать только один элемент, к примеру это Window, Frame, Border, Button. А есть элементы, которые могут содержать в себе коллекцию, типа Grid, StackPanel, DockPanel, Canvas, ListView.

Поэтому ты не сможешь в Window положить кучу гридов (можешь сам проверить), зато ты можешь в Window положить один грид, а внутрь грида положить хоть сотню страниц. Собсно, в стартовом шаблоне, внутри Window помещен Grid именно по этой причине.
Так же и с Frame, если тебе надо положить туда 10 страниц одновременно, то ты во Frame сперва помещаешь Grid, а уже в этот Grid свои 10 страниц.

WPF это чистейшая матрешка. Ты можешь в кнопку поместить StackPanel, а внутрь этой панели поместить кучу страниц.

Во-вторых, ты сам выбрал себе этот "легкий" путь, кек. Поэтому да, вот такие кривые вещи тебе придется делать и ломать голову.
По поводу твоей пробелмы:
1й вариант.Ты можешь опять же в грид запихнуть все свои страницы разом и потом попеременно включать видимость нужной.
2й вариант. Ты можешь хранить список страниц в коде, а потом брать страницу из этого списка и помещать ее в контейнер. Не обязательно в грид, а точнее в этом случае нахер тут не нужен. Возьми любой контейнер, поддерживающий только один элемент, к примеру Border. Тогда замена содержимого будет выглядеть как-то так:
MyBorder.Child = MyPages(2);

Ну и навалил же я кучу, только запутал. Пожалуй остановлюсь, ибо дохрена чего еще.
178 2610400
>>10399

>MyBorder.Child = MyPages(2);


Бля, забыл, что это шарп.
myBorder.Child = myPages[2];
179 2610405
Как в свой usercontrol, который служит шаблоном для listview, передавать данные? Создать список вьюмоделей во вьюмодели представления, и в самом представлении установить их в как источник данных?
180 2610421
>>10405
непонятна твоя проблема
обычно к списковому контролу биндится коллекция к ItemsSource и в DataTempate итевом автоматически попадает нужный элемент этой коллекции как DataContext
181 2610447
>>10100

>Установленные sdk вообще не выводились, хотя я уже руками качал .net sdk и ставил.


Ты в курсе, что в инсталлере студии есть вкладка с доп. компонентами, через которые можно поставить любой нужный sdk и runtime, плюс еще дохрена всяких приблуд. Я уже лет 5 ничего руками не докачивал и не ставил, только через инсталлер.
182 2610450
>>10399
Спасибо за ответ, завтра попробую сделать что-нибудь.
183 2610453
>>10450
вообще смену контента делают через ContentControl если конечно тебе не нужно хранить фокус где то внутри страницы при переходе вперед и назад.

а Frame - для мазохистов.
184 2610496
>>10495 (Del)
еще бы моки с таким подходом
но где где - везде сплошные "давайте интерфейс/virtual"
185 2610617
>>10453

>вообще смену контента делают через ContentControl


Ну да, кстати.
186 2610631
>>10617
А еще внезапно TabControl пересоздает же вьюхи при переходе. и все фокусы летят в одно место. И нужно гуглить спец реализацию без пересоздания

А еще Popup по факту Topmost=true, хотя непонятно зачем. И опять же нужно юзать кастомные реализации

это ж мелкие - они умеют делать говно.
187 2610674
>>10631

>А еще Popup по факту Topmost=true, хотя непонятно зачем.


Я при помощи него делал выпадающую шторку как в смартфонах и контекстное меню по ЛКМ. И там не надо морочиться с автоскрытием по клику за пределами формы, что нетривиальная задача с опцией AllowTransperency.
188 2610683
Скинули тестовое задание
@
Весь день настраиваешь ему окружение
@
Всю ночь пытаешься сбилдить
@
НЕ СОБИРАЕТСААААА!!!!!!!!111

(Нугет не находит пакеты, которые хз откуда брать)

Финиш )
189 2610690
>>10683
Вообще есть ли смысл обратно вкатываться в ынтырпрайз на Шарпе, если последние года 3 винду видел только на картинках?
Дали тестовое - все норм, код понятный, что делать - тоже понятно, но где брать сраные библиотеки, которые он требует при сборке - хз. Сижу под vscode с плагинами С# и vscode-solution-explorer. Плачу над проебанным на все это днем (((
190 2610765
>>10683
прибежали в избу дети
второпях зовут отца
тятя! тятя! нет в нугете
и не собираетса!!!

если их нет в нюгете значит они либо рядом лежат как длл
16763048994530.jpg126 Кб, 312x516
191 2610877
>>10690

>Дали тестовое

192 2610918
>>10765
Не было. Качал по названиям либ, подключал вручную. Вроде норм теперь. Но авторы, конечно, могли бы хоть намекнуть, где их искать.
193 2610920
>>10877
А что не так? Иду на позицию джуна, собеса еще не было.
4352d137f7a645ee0e99a80bac231e4f.jpeg24 Кб, 450x292
194 2610931
>>10920
И не будет.
2023-02-1415-17-34.png567 Кб, 1658x744
195 2611020
>>09690

> Вообще конечно во вьюмоделях и команды есть


Так и есть у меня. Всегда считал команды частью вьюмодели, но тут смотрю восьмой стрим Шмачилина и вижу пикрилейтед. Он создает команду, где внутри создает экземпляр окна. Разве так можно?

Я делал так. У меня была аналогичная задача с выводом окна настроек по команде. Что я делал? Я во вьюмодели создавал событие что-то уровня "RequestShowSettings" и все что делала команда — это вызывала событие и её вообще не волновало есть ли окно или нет. А вот само окно настроек когда принимало вьюмодель, искало данное событие и если находило, то подписывалось на него.

Ну вот как бы я так решил проблему, а тут оказывается не зашквар пихать вью во вьюмодель.
196 2611064
>>11020

> Разве так можно?


судя по всему он использует их в xaml напрямую. То есть это особые команды. так можно.

во вьюмоделях он использует LamdaCommand что еще называют RelayCommand/DelegateCommand

А вот CollectionViewSource во вьюмоделях уже неправильно.
ведь в отличие от INPC он лежит в сборке вида System.Windows.Data
197 2611138
>>10683
Ты провалил проверку на софтскилы. Вместо того чтобы просто спросить "где пакеты брать, бля ?", ты сидишь и дрочишь в углу, пытаясь самостоятельно решить проблему и теряя время.
2023-02-1416-40-29.png221 Кб, 1000x744
198 2611145
Почему автор хранит во вьюмодели экземпляры страниц и как вообще хранить страницы, каждая из которых по сути уникальная? Нужно под каждую страницу создавать свою модель?
199 2611172
>>11145
на пике вообще не MVVM, что впрочем и не утверждается
2023-02-1417-08-41.png18 Кб, 675x158
200 2611177
>>11172
Утверждается в заголовке, хотя тутор делал какой-то школьник.
201 2611197
>>11177
ну значит автор не разбирается

А в чем проблема создать под уникальную страницу свою уникальную вьюмодель?
202 2611225
>>11197

>А в чем проблема создать под уникальную страницу свою уникальную вьюмодель?


В целом проблем нет.
203 2611273
Почаны, поясните, а микросервисная архетектура сейчас совсем в лету канула? Или вэб разработка на дотнете в целом приуныла.

Год назад полно было вакансий со всякими раббитами, кафками и прочими в требованиях. А сейчас все это пропало. Или это просто hrы поумнели и всякое сторонее говнище в JD больше не пишут.
204 2611281
А обязательно регистрировать сервисы в DI на старте?

Ну вот, к примеру, я сейчас смотрю как Павел Шмачилин создает сервис диалогового окна. Его решение состоит у него из одного проекта и проблем вроде как нет.

В моем решении сервис окон — это отдельный проект, есть даже окна как отдельный проект и в каждом окне может быть штук 10 диалоговых окон. А вместе это целый зоопарк.

Можно при регистрации, к примеру, сервиса окно, чтобы он по ходу сам зарегистрировал n сервисов связанных с диалоговыми окнами? Или это нарушает DI?
Наверно нарушает — придется лазить по всему решению и подчищать эти сервисы, если что вдруг.

Вот не нравится мне, что все в одной куче.
205 2611286
>>11281
Можно при регистрации, к примеру, сервиса окно
сервиса окон*
1123.jpg73 Кб, 1200x742
206 2611290
>>11281
Картинка для напоминания. У меня почти каждый сервис — это отдельный проект.
207 2611291
>>11281
в реализации контейнера от майков тебе нужно сбилдить контейнер же. И после этого в этот контейнер ты не зарегаешь же ничего.

В других контейнерах возможно и потом, но лучше все регать на старте.

>чтобы он по ходу сам зарегистрировал n сервисов связанных с диалоговыми окнами? Или это нарушает DI?


ну так ведь так и делается.
когда ты пишешь services.AddFeature то там же целая куча всего регается.
Ты это можешь делать и в динамике - на старте пробежаться по сборкам (что усложнили) и попросить каждый модуль зарегать все что ему нужно.
208 2611405
>>11138
Точняк, спасибо. Буду знать теперь.
image17 Кб, 450x200
209 2611409
Аноны, как с акронимами обращаетесь в коде (от 3 букв)? Допустим, как писать "iOS" в коде:

LoginWithIosDeviceId
LoginWithIOSDeviceId
LoginWithDeviceId_iOS
210 2611413
>>11409

> LoginWithIosDeviceId


Обычно так.
211 2611417
>>11409
Третий вариант мне нравится больше. Если есть много схожих функций, то я предпочитаю неизменный текст отделять от меняющегося — так удобнее категоризировать.
LoginWithDeviceId_iOS
LoginWithDeviceId_Win
Если только это не название класса.
image55 Кб, 495x247
212 2611420
>>11417
Да тут по сути только Android и iOS
213 2611434
>>11420
Ну, все читаемо.
2023-02-1510-55-50.png5 Кб, 625x166
214 2611870
Почему в NET настройки проекта какие-то ебанутые?
При указании директории для сборки показывает ошибку (я помню что это началось чуть ли не в Net Core 3). И вот уже Net7, а директорию по прежнему приходится править вручную в .vbpropj

Хочу сменить точку входа. Что за хуета на пикрил? Какой Form1? У меня WPF, Net7, по дефолту точка входа Main.
215 2611873
>>11870

> в .vbpropj


> vb


Проблема в этом. На шарпе таких сложностей нет, все работает из коробки.
216 2611875
>>11873
Как же заебало это некроговно, пиздец просто.
2023-02-1512-53-57.png58 Кб, 300x262
217 2612066
Автор переопределяет точку входа.
На пикрил он создает экземпляр App, который является наследником System.Windows.Application
... и его инициализирует.

А откуда, собсно взялся метод InitializeComponent?
В Application его нет. Класс App пустой.
218 2612074
>>12066
App это наследник Application
наследственность задана через App.xaml

посмотри на окна или юзерконтролы - классы там partial
тут тот же принцип
Image 3.png14 Кб, 403x339
219 2612082
>>12066

>В Application его нет.


есть. у тебя кривая подсказка
2023-02-1513-16-11.png26 Кб, 716x446
220 2612099
>>12074
Это я понял. У меня вопрос в каком месте появляется метод InitializeComponent?
В App.xaml нет, в App.xaml.cs нет.

>>12082

>есть. у тебя кривая подсказка


Где? В App есть, а в Application нет.
221 2612108
>>12099

>В App.xaml нет, в App.xaml.cs нет.


Имею ввиду, что там отсутствует код добавления InintalizeComponent.
Но если обратиться к App, то он волшебным образом присутствует.
222 2612119
>>12099
он появится если у тебя будет App.xaml вида
<Application x:Class="MyProject.App"
что сделает App наследником Application

попутно этот хамл СГЕНЕРИТ partial СВОЮ часть класса App с методом InitializeComponent

xaml же описывает наследование и реализацию partial класса, вторая часть этого partial класса есть code-behind
223 2612132
>>12066
Но если ты смотришь на CV19, то это бредово вообще совмещать WPF и HostBuilder

1 protected override async void OnExit(ExitEventArgs e) ждать не будет пока там хост сервисы завершит корректно
2 пока вообще стартуют завершаются сервисы и вдруг это долго - пользователь должен гадать "висит али нет"

это гуи. тут нужно сплэшскрин пока все стартует.
224 2612154
>>12119
Ясно. У меня в бейсике произошел наверно уже классический сбой, когда code-behind не видит xaml. Соответственно, не видит InitializeComponent и я не мог понять в чем проблема. И главное это никак не пофиксить.

Вот из особенностей бейсика
В шарпе App : Application
В бейсике Application : Application

В code-behind класс не указывается как partial и что он наследует Application. Практически нет ничего, чтобы указывало на реальные дела.
225 2612169
>>12132
Я планировал сплешскрин, но я думал, что HostBuilder нужен до старта приложения. На SO видел что у некоторых возникали проблемы.
226 2612190
>>12132

>protected override async void OnExit(ExitEventArgs e) ждать не будет пока там хост сервисы завершит корректно


У меня до DI был свой менеджер завершения приложения, так что тут норм все. Просто сейчас я пока еще юзаю DI скорее как заклинание.
Image 4.png10 Кб, 348x218
227 2612194
>>12154
на скринах все неправильно же

вот как нужно
синей стрелкой - там еще пишут наследование и решарпер ругается что reduntant

>>12169
хост билдер ему нужен чтобы юзать его возможности - типа чтение конфига (можно напрямую и без хоста, да и для WPF такой конфиг не особо полезен), запуск остановку сервисов - опять же элементарно без него. Ну может там что то и с папками я хз. В общем лишняя приблуда, что насыпает кучу длл в проект, а польза сомнительная.

У него в App.xaml
StartupUri="Views/Windows/MainWindow.xaml">
и поэтому ему нужен ViewModelLocator
и получается async метод OnStartup() работает бесполезно параллельно

я предпочитаю другой подход. всегда удаляю StartupUri и все делаю в OnStartup где после того как сделал все нужное создаю осовную форму и вьюмодель.

попутно могу там создать и 2 окна, и невидимые окна и сплэшскрин который будет работать правильно.
228 2612200
>>12194

>на скринах все неправильно же


Это дефолтный шаблон VB. Я об этом и пишу, там все ебануто.
229 2612224
>>12200
... причем если начнешь лезть в это дело, то у студии крыша едет.
К примеру, у когда набирается штук 20 partial классов в связке с xaml, то начинает то тут то там возникать ошибки, мол code-behind класс не видит метод или свойство из xaml-части.

Я этот проект доделаю и срулю с бейсика. У меня уже сил нет.
230 2612294
>>12194

>всегда удаляю StartupUri и все делаю в OnStartup где после того как сделал все нужное создаю осовную форму и вьюмодель.


Можно ставить просто Startup и тогда указывается путь к желаемому методу. А StartupUri это если у тебя одно окно и больше никаких сервисов. Хотя я смотрел в App.g и там по сути генерится подписка на событие Application.Startup.

>В общем лишняя приблуда, что насыпает кучу длл в проект, а польза сомнительная.


У меня в принципе все так приблизительно и было устроено — был общий хаб из кучи сервисов, которые я называл у себя менеджерами. Иначе бы у меня просто не заработало, когда каждый сервис — это отдельный проект.
2023-02-1515-41-20.png3 Кб, 1184x93
231 2612415
За три года библиотека пожирнела в 10 раз — с 29М до 290M
232 2612418
>>12415
мелгомягкие опять обосрались с оптимизацией
233 2612436
>>12415
это СЧЕТЧИК скачиваний )))
2023-02-1516-13-12.png13 Кб, 320x570
234 2612448
>>12436
Бля ... а я думаю чет одной буквы не хватает.
16588910693230.webm961 Кб, webm,
540x960, 0:15
235 2612471
Привет, шарпаны.
Вопрос 1. Есть два View, один главный, в котором находятся кнопочки и второй, в котором находится контент. Когда жмёшь кнопочку в главном, то меняется значение в глобальной переменной. В зависимости от значения отрисовывается контент во втором View. Проблема в том, что он не самообновляется и контент отрисовывается только один раз. Как сделать так, чтобы при нажатии кнопки/изменении переменной, рефрешился контент во втором View?
Вопрос 2. Во втором View в файле xaml.cs у меня написана всякая логика, которая что-то делает/отрисовывает новый контент на странице. У меня есть ещё файл с классом и логикой, из которого дёргаются дополнительные функции. Как мне в этот файл с классом передать Grid/Row/Column из View, чтобы использовать внутри классовых функций методы типа gridRowName-Children.Clear(), gridRowName.Children.Add(name) ?
236 2612493
>>12471
Шмачилин как раз буквально месяц назад выложил ролик на эту тему.
https://youtu.be/XG2reVjcNTs
237 2612498
>>12471

> Проблема в том, что он не самообновляется и контент отрисовывается только один раз.


Во-первых, ты реализовал биндинг? Ты же не меняешь значение напрямую?
Во-вторых, у твоего биндинга какой режим? По-умолчанию он односторонний.

Я заметил, что если у связываемых свойств разные данные, то биндинг ломается. Т.е. могу предположить, что у тебя односторонний биндинг и с той стороны, где нет обновления, ты меняешь свойство — с этого момента с другой стороны ломается биндинг. Либо у тебя биндинга вообще нет. Лиоб у тебя стоит режим биндинга OneTime
238 2612509
>>12498
мимокрок
обычно реализации INPC проверяют на дубликаты. То есть важно как именно обновляется свойство

но у автора не MVVM, а значит пусть страдает
239 2612510
>>12471

>Вопрос 2


У тебя MVVM или под View ты понимаешь какой-то тип контрола?
kod.jpg267 Кб, 1588x869
240 2612520
>>12498

>ты реализовал биндинг



Скорее всего нет. У меня в xaml файле ток скелет, а логика и как что меняется в файле с классом отдельно и часть в xaml.cs

>>12510
Я стартовал базу по гайду, там MVVM, но что у меня по факту получается это другой вопрос
241 2612526
>>12520
вот смотрите на него - наглядный пруф что в впф можно как в винформсах и нафиг те формсы нужны
Да хто эти ваши ОБСЕРвабл КАЛлекшионы? аноним 242 2612586
Уже второй год изучаю шарп и вдруг пришло осознание, что вообще не в курсе как работает многопоточность, мой уровень async await. Хочу восполнить данный пробел. Можете посоветовать годные книгу/статью/видос по данной теме?
243 2612608
>>12526
Я так и начинал, лол. Я вообще в впф перешел по принципу "винформс, где можно кнопочки вращать".

>>12520
Ну смотри, с этого момента начнется Ад, все девять кругов, если не встанешь на путь истинный. С MVVM — всего лишь пару кругов. Все что ты должен уяснить, это не менять параметры напрямую, иначе будет пикрилейтед 1.

Ты должен погуглить что такое биндинги. Это связывание двух свойств, и меняя одно, автоматом меняется другое, после чего у тебя перестает болеть голова по поводу того как все это обновить. Погугли конкретно эту задачу и отработай ее на тестовом проекте.

Для этого нужны специальные свойства, точнее свойства обмазанные поверх еще кодом. Два варианта:
1. как анон пишет INPC, что расшифровывается как INotifyPropertyChanged. Суть проста: нужное событие кроме того, что сохраняет значение, еще и вызывает событие, мол "пацаны, я тут обновляюсь", и все пацаны, которые подписались на это событие, тоже автоматом обновляются. Вот как ты подписываешься на событие нажатия кнопки (наверно), тоже самое делают свойства, но делают они это автоматически.
Здесь ты должен еще уметь не только подписываться на события, но создавать и вызывать их.

2. Это DP или DependencyProperty. Этот вариант в основном нужен для элементов интерфейса. Т.е. все вот эти свойства в кнопочках, типа Background, Width, Height, Margin и т.д. — все это Dependency Properties. И вот когда ты меняешь разметку xaml и у тебя автоматом меняется данные в окне Свойств — это заслуга привязок к Dependency Properties.

Короче, гугли:
- Events. Создание, вызов и подписка.
- INotifyPropertyChanged (тут бы еще в интерфейсы вникнуть, но пока пох)
- DependencyProperty
244 2612614
>>12608

>для элементов интерфейса


пользовательского интерфейса* а то будет путаница с интерфейсами
245 2612620
Блядь, почему у Авалонии нет нормальной подсветки синтаксиса и автокомплита в вижаке, но есть в райдера? Ебучие жыдбрейнсы
246 2612628
>>12620
Наверно у них есть статистика по числу пользователей. Щас бы в проприетарной студии шатать авалонию.
Ты случаем не полупокер?
247 2612645
>>12628
А райдер не проприетарный? Чо несёт...
248 2612646
>>12593 (Del)
Благодарю
249 2612649
райдер просто оф поддерживает авалонию
а мелкие считают что авалония обладает фатальным недостатком
250 2612702
>>12620
А ты расширение ставил?
251 2612740
>>12702
Поставил, оно только подкидывает свойства контролов. Хайлайт на уровне просто xml схемы, автокомплит не видит методов в код бихайнд. Сам фреймворк выглядит круто, то что нужно моей тиме. Но если поддержка в вижаке только такая то это печальная хуйня - верстать ui в голом xml это шиза.
kod2.jpg365 Кб, 1525x1044
252 2612761
>>12608
Вопщем написал Binding текста к тыканию кнопки. Но у меня кнопка и Лейбл с текстом на разных страницах/View/xaml файлах. Когда всё в одном файле то работает, текст изменяется, когда в разных ничего не происходит. Может там пути какие-то по особому прописать надо?
253 2612763
>>12740
Перекатывайтесь на uno platform, одобрено майками.
254 2612774
>>12763
Уно тоже чекаю сейчас, мы уже работаем с WinUI 3. В авалонии просто много хороших синтаксических плюшек в xaml добавили как я успел увидеть в доке (обращение к родителю через индекс, например), а WinUI 3 чот дубовый, xaml времён wpf. Некоторые вещи делаются только через анальное сальто.
255 2612806
>>12761
У кнопки подписка на метод CloseClick, а линия ведет к методу ClickSecondResult. Это не ошибка?

Можешь то нибудь вывести на печать в методе ClickSecondResult и что нибудь при присвоении value в Content и посмотреть в каком месте отвалилось.
Ну или точками останова.
256 2612808
>>12806

>подписка на метод CloseClick


хуйню сморозил, ну в общем ты понял
257 2612819
>>12774

>в xaml


Я, блин, не понимаю как вы это дерьмо вообще используете. Да еще и выбирать можете где эта куча говна менее пососная.
Мимо бэкэндер.
258 2612821
>>12819
Через силу, потому вечно в писках.
259 2612822
>>12819
Бэкендер проходи мимо.
Вот когда встанет у тебя вопрос необходимости гуи вот тогда и приходи померяемся... удобством
260 2612823
>>12819
И я не понимаю, юзаю няшные винформы, описываю контролы декларативно в коде через инициализаторы.
261 2612837
>>12806
Да, сорян, уже залипаю. Но сути особо не меняет. В консоле показывает что на кнопку всё нормально биндится и вэлью обовляется, но обновлённый текст дальше в элемент в другом View не выводится.
262 2612865
Кто-нибудь знает, можно ли с помощью mailkit получить метки или поставить.
Я имею ввиду те метки, что юзер добавляет на сообщение в яндекс почте
263 2613091
>>12822

>Вот когда встанет у тебя вопрос необходимости гуи вот тогда и приходи померяемся


Ну я как раз таки и ушел в чистый бэкенд, чтобы даже длинной палкой эти ваши гуи не трогать, так что не померяемся.
264 2613093
>>12979 (Del)
Какой 'хайп', ты о чем? Иди пей свой смузи зумерок и не отвлекай взрослых дяденек от работы.
265 2613094
>>13093
Сейчас на хайпе голанг и зумеры реально схавали язык с дизайном из 1970
266 2613116
>>13091
так не путай теплое с мягким.
сам ведь свои слова не в консоли написал, а значит гуи таки нужен. И если бы ты был фронтендер то твои слова имели бы смысл, а так ты просто пукнул в лужу.
267 2613198
>>13116

>значит гуи таки нужен


Ты сам с собой что ли разговариваешь? Никто не говорил, что гуи не нужен. Разговор был об уебищности xaml-like синтаксиса.
268 2613245
>>13198
А я сказал "приходи с альтернативами - померяемся"

Сам я не люблю хамл, но альтернативы какие? Описание в коде, как винформс генерит? Сразу нах.

Хтмл... ммм тот же хмл

MVU стиль... как там в мауи новое
Неплохо,но шарп беден на выразительность
И вообще то что норм для мобилы - мало для десктопа

Что осталось? А ничего

А ты с чем пришел....
269 2613275
>>12837
Странно, тогда как место расположения кнопки может влиять на обновление данных, если проблема во вьюмодели? Ты же вьюмодель не пересоздаешь нигде, никуда не перемещаешь? Она подхватывается вообще?
270 2613277
>>13091

>ушел в чистый бэкенд, чтобы даже длинной палкой эти ваши гуи не трогать


А мог бы предложить свой вариант решения проблемы, вместо того, чтобы убегать от нее. Но видимо ты можешь только кукарекать.
271 2613283
>>13277

>А мог бы предложить свой вариант решения проблемы, вместо того, чтобы убегать от нее.


А еще голодающих детей в Африке накормить.
272 2613284
>>13245
Надо было сделать язык разметки в стиле шарпкода.
У меня как минимум две претензии к хамл:
1. нет инкапсуляции
2. ебешая мусорная вложенность даже на малейший пук.
3. почему если возникает ошибка в xaml, программа не останавливается на этой ошибке, а идет дальше, где совершенно очевидно будет все очень плохо и куча исключений.

Где-где, а в стилях я бы мигом реализовал DI. Сейчас, если у меня отвалится стиль, то посыпется весь проект. Я не могу проект сделать по настоящему модульным. Я не могу вычленить проект из одного решения и вставить в другой чисто из-за стилей.
273 2613287
>>13283
Зачем? Сконцентрируйся на одной задаче и решай ее. Ну или отойди в сторону и не бухти.

Все знают, что хуета, просто лучшего не придумали.
274 2613309
>>13284

>Надо было сделать язык разметки в стиле шарпкода.


помню в разных языках делали разметку для хтмл типа так
h1{
p{...}
}
сильно взлетело? так это только разметка же.

а xaml это не разметка, а декларативное выражение кода. иначе будет как в (ну на жс я не пишу, поэтому для меня это андроид - xml лежат отдельно и связывает все это code-behind - и там и там гора текста). Почему хмл, а не DSL - тут хз. Но что есть то есть.

>1. нет инкапсуляции


непонятно о чем это. в code-behind все есть, а то что генерит xaml - наружу то и не просачивается так чтобы где то мешал

>2 ебешая мусорная вложенность даже на малейший пук.


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

>3 программа не останавливается на этой ошибке


ошибка в хамл не прокатит. ошибка в биндингах прокатит и другие исключения глотает. что не гуд, но это не хамл, а WPF такой.

>Я не могу проект сделать по настоящему модульным


ну с этим проблема в design-time. тут они сделали херню...как и со стилями.

>>Надо было сделать язык разметки в стиле шарпкода.


вот я буквально ссу кипятком от выразительной мощи jetpack compose. но это не шарп.... а шарп...это шарп. его new, отсутствие инлайн функций, отсуствие функций без классов и много чего другого сильно ограничивает. Даже в мауи они пошли по пути "делаем как swift combine" что лучше чем ничего, но по факту "мы сделали как могли".
Для мобилок покатит, для десктопа увы.
275 2613314
>>13309

> что не гуд


Как раз таки гуд. Смысл крашить приложения из-за пары не прогрузившихся биндингов?
276 2613317
>>13314
не гуд. в итоге каждый метод который привязан к команде я вынужден оборачивать в try..catch, даже если это пет проект.
277 2613365
>>13309

>непонятно о чем это.


>по факту полный эквивалент кода на шарпе. так что вложенность она от самой природы


Почему не сделать через ту же точку.
Почему вместо вот этого дерьма
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>

</ControlTemplate>
</Setter.Value>
</Setter>


не писать так:
Setter Property="Template" {
Value {
ControlTemplate{

}}}


Я конечно придрочился уже, но в первые дни в глазах рябило.
278 2613367
>>13245

> Сам я не люблю хамл, но альтернативы какие?


QML
279 2613369
тест

▲ ▲
280 2613372
>>13367
Оно шарповое? Увы нет.
Что там вообще с концепцией lookless? А ничего

Xaml кажется говном пока не начнешь искать замену
281 2613374
>>13369

▲ ▲
282 2613397
▲ ▲
283 2613431
Признаем честно. .net - ахуенная платформа а Шарп самый ахуенный язык. Но в пыняленде заправляют жависты. Жалко вас оставлять, но я пошел ковырять шпринг... Не хочу умереть с голоду. Пока джавадебил пилит круды в сбере за 250к я должен вкуривать в фуллстак с микросервисами кубером и кафкой чтобы получить дай бог 180. В пизду. Теперь Яджавадебил.
284 2613435
>>13431

>Теперь Яджавадебил.


Таких дебилов-умников знаешь сколько? Они все настолько умники, что дебилы.
286 2613512
Смотри чему блейзор научат в 8 дотнете.
https://www.youtube.com/watch?v=48G_CEGXZZM

Если вкратце, то блейзер сервер сможет оправлять любой компонент в виде вебасембли в браузер пользователю и закрывать соединение. Таким образом высоконагруженные компоненты будут грузить ресурсы пользователя, а не сервера.
hqdefault.jpg15 Кб, 480x360
287 2613601
>>13512

>Лицо ПК когда блейзер скидывает нагрузку, а ПК еще не отошел от хрома и майнеров.



Т.е. условная веб-версия фотошопа будет обычным фотошопом, но с защитой от правки файлов. Вот это многоходовочка копирастов.
288 2613657
>>13574 (Del)
А если типичный пользователь оставляет 5000 вкладок?
289 2613665
>>13275
Да,само вью обновляется через onpropertychanged по клику на кнопку, которая в главном вью, а вот значение чего либо, текста например, внутри обновляемого вью, которое идёт через биндинг, не обновляется.

Пока просто сделаю несколько вью. И на второй свой вопрос я нашёл ответ, так что станет меньше дублируемого кода.
290 2613672
>>12837

> пик


Зачем ты сам реализовываешь relaycommand, onpropertychanged и тд? Есть же готовые mvvm фреймворки вроде reactive ui.
291 2613681
>>13672
Я до этого в с# не кодил и не знаю что есть, а что нет.
В любом случае использовать фреймворки-библиотеки не разобравшись в базе, это мартышкин труд.
image40 Кб, 694x223
292 2613747
Пацаны, а это нормально, что я в свойствах возвращаю структуры? И чтобы внести изменения, нужно сначала получить значение из свойства, а потом его задать обратно и вызвать Save, типа:

var settingsPrefs = _sharedStorage.SettingsPreferences;
settingsPrefs.SelectedLanguage = Language.Russian;
_sharedStorage.SettingsPreferences = settingsPrefs;
_sharedStorage.SaveChanges();
293 2613844
>>13665
Проверь DataContext страницы (где должно быть обновление) на наличие экземпляра вью. Вроде есть еще событие DataContextChanged, но это не точно.
Там же попробуй проверить свойство Content этого вью.
Еще для уверенности поставь через запятую режим привязки Mode="TwoWay"
Text="{Binding Content, Mode=TwoWay}"
Это сделает привязку двухсторонней.

Либо как нибудь по нажатию условной кнопки проверь DataContext.
Окно интерпретации ничего не пишет? Нет там Data Binding Error?
294 2613861
>>13747
Ненормально.
SettingsPreferences у тебя должен быть классом, раз у тебя такая сложная начинка.
Соответственно, меняя свойство SettingsPreferences.SelectedLanguage у тебя автоматом внутри _sharedStorage должно все обновиться.

Либо создавай на ходу новый экземпляр SettingsPreferences и кидай его в _sharedStorage. Ели так не можешь, что структура здесь бессмысленна. Структура должна быть ровно такой, чтобы ты на ходу мог записать вот так: new point(10, 45)

Не ты случаем боишься нагружать GC в своей мобильной дрочильне?
295 2613865
>>13747
Вангую SaveChanges перебирает все свойства на предмет совпадений со старыми SettingsPreferences. Сколько там свойств в сеттингах?
image92 Кб, 502x943
296 2614215
>>13861

> Не ты случаем боишься нагружать GC в своей мобильной дрочильне?


Ну да.

> SaveChanges перебирает все свойства на предмет совпадений


Нет. Мой класс - это обёртка над SharedPreferences на Android и NSUserDefaults на iOS. В чём суть этих классов? Они хранят данные по ключ-значение. Вот такие у них методы:

- SetInt(ket, value)
- SetBool(ket, value)
- SetString(ket, value)

И ещё метод commit/sync, который сохраняет изменения в файл. На Android все эти значения сохраняются в XML файл, который хранится во внутренней памяти смартфона. Я решил не дрочить каждое поле делая его отдельным ключом, а использую JSON.

Плюс нужно ещё дефолтные значения держать. Если пользователь зашёл первый раз, то мне нужно подставить дефолтный SettingsPreferences/ControlsPreferences. Можно конечно захардкодить эти значения в самих структурах, но мне ещё нудно во время тестовые подставлять другие значения, поэтому их лучше всё же загружать откуда-то внутри SharedStorage.
297 2614232
>>14215
Я наверно нюансов не знаю, но я смотрю на это и мне хочется сеттинги и преференсы сделать классами. Ну это же настройки приложения, они загрузятся раз в сессию и всё.

>Плюс нужно ещё дефолтные значения держать.


Это все из коробки есть вроде. Если в кастомных настройках что-то отсутствует, то оно берется из дефолтных.

Ты десериализуешь JSON?
298 2614250
>>14232

> они загрузятся раз в сессию и всё.


Да, именно так.

> Это все из коробки есть вроде


Нет. Это мне самому нужно в коде сделать.

> Ты десериализуешь JSON?


При первом обращении десериализую строку. Если строка отсутствует, то возвращаю дефолтное значение структуры. Если строка присутствует, то результат десериализации сохраняю в переменную, чтобы каждый раз этого не делать, когда запрашиваются настройки.

В общем, фиг знает... Мне нужно использовать native хранилище "ключ-значение". Хранить там как-то различные настройки. И при этом иметь возможность подставлять дефолтные значения (то же расположение элементов управления на экране например)
299 2614257
Зачем в IHost метод Run?

Когда я добавил сервисы, то думал, что экземпляр требуемого сервиса будет создан как только его потребуют. По факу у меня тишина, ибо не было того самого инициатора. После IHost.Build() ни один из сервисов не запустил конструктор.

Как только я у хоста потребовал хоть один сервис, вся цепочка сервисов проинициализировалась и запустилась. Но я по прежнему не понимаю для чего нужен тогда IHost.Run()? Есть еще IHost.Start().
300 2614267
>>14257
ааа, без этого как минимум логгирование не работает.

Тогда я что-то делаю не так со стартом сервисов. У Павла Шмачилина напрямую запускается основное окно, которое треубет сервис. У меня же запуском окна заведует другой сервис, который никогда не проинициализируется самостоятельно.

В общем я запутался для чего нужен этот Run. Почему я не могу так же пнуть логгер? Зачем ему нужен Run? Или это касается только логгирования методов, типа Microsoft?
301 2614278
>>14250

>В общем, фиг знает... Мне нужно использовать native хранилище "ключ-значение".


У тебя такие сложности только из-за сопоставления дефолтных настроек и пользовательских. Вместо того, чтобы запихнуть в десериализацию класс\структуру целиком, ты начинаешь десериализовать поэлементно.
Ты начинаешь обращать внимание на формат "key, value", хотя это вообще не стоит внимания.

Не могу ничего пока сказать, я до IConfiguration еще не добрался, пока разбираюсь с логгированием. Но жопой клянусь было там что-то, что решает проблему сопоставления настроек. По-моему это называется "разные уровни настроек" по аналогии с разными уровнями логгирования. У тебя должен быть уровень дефолтных настроек, уровень настроек для отладки (где ты и дописываешь свои тестовые настройки), и есть уровень настроек обычных.
302 2614280
>>14267

> IHost.Build() ни один из сервисов не запустил конструктор


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

как и DI контейнер от майков

>>14257

>IHost.Run()? Есть еще IHost.Start().


потому что без этого у тебя просто сконфигурированный хост и ничего более.

чтобы сконфигурированный хост наконец запустить. тогда он под капотом запустит хостед сервисы как минимум.

и вообще эти рун/старт = обертки над асинк версиями с помощью GetAwaiter().GetResult()

а разница между ними такая же как в винформсах/впф разница между Show/ShowDialog - то есть "когда метод вернет управление"
303 2614293
>>14280

>а должен?


Я пытаюсь осмыслить принцип, и предполагал, что при билде сервисов будет создан хотя бы один экземпляр, по крайней мере для синглтонов.
Хотя наверно это логично. Зачем плодить сущности, если их никто не требует?

>тогда он под капотом запустит хостед сервисы как минимум.


Он запустит только свои внутренние сервисы, но не добавленные мною?
Просто я могу сконфигурировать сервисы и запусть самостоятельно нужный, и у меня будет все работать без Run. Как бы, отряд не заметит потерь.
304 2614356
>>14293
принцип простой - билдер позволяет удобно сконфигурировать и создать какой то объект. в этом смысл паттерна билдер.

>при билде сервисов будет создан хотя бы один экземпляр, по крайней мере для синглтонов.


они будут созданы по мере надобности. Незачем их создавать заранее. Даже в подходе MyClass,Instance инстанс не создается до первого обращения. Так и тут - нет нужды, вот и не создается.

Билдер сконфигурирует конфиги, сбилдит DI контейнер, установит хендлеры на события консоли (и то не факт, может это после старта) и так далее

>Он запустит только свои внутренние сервисы, но не добавленные мною?


Вряд ли унего есть что то свое. А значит он выдерет из контейнера все IHostedService и запустит их

>Просто я могу сконфигурировать сервисы и запусть самостоятельно нужный


Конечно можешь. Это ж просто дается унифицированный вариант. ОДИН из вариантов просто от вендора. Чтобы ты в каждом консольном проекте не писал свой велосипед заново.
Но это не является убер фичей. Просто ОДИН из готовых вариантов.

Если тебе нравится их подход то это позволяет тебе не бойлерплейтить лишний раз. Мне вот не нравится - слишком засирает дллками, да и IOptions не люблю и логгер Nlog использую

Иначе ты можешь писать свой хост. А потом заметив что ты пишешь одно и то же от проекта к проекту - соберешь все в либу и будет у тебя свой такой же. Этот от майков не первый же - их много.
image.png65 Кб, 1116x167
305 2614399
Чет я уже заебался, аноны, полдня ебусь с этими поведениями. Почему у меня код на пикрил срабатывает только один раз?
306 2614405
Say Goodbye to Code-behind: WinForms meets MVVM & .NET MAUI
https://devblogs.microsoft.com/dotnet/winforms-cross-platform-dotnet-maui-command-binding/

Формочки научат MVVM. Лица впф макак представили?
2023-02-1715-25-40.png11 Кб, 422x575
307 2614423
>>14356

>Мне вот не нравится - слишком засирает дллками


Эх, и зачем я смотрел в bin?

>Иначе ты можешь писать свой хост.


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

> и логгер Nlog использую


Я видел там, что можно самому указать паттерн вывода сообщения.
Хотел читать логи с подсветкой синатксиса.
308 2614429
>>14423
нужно смотреть в publish.

создайть контейнер, запихать в него все, тупо из него достать IHostedService - запустить их и выгрузить потом, прочитать конфиг из жсона, прикрутить логгер - все это очень простые вещи

просто являются бойрелплейтом, но все же простым.

по логгеру - везде можно указать много чего. Nlog мне нравится подходом к конфигурированию - отдельно логгеры, отдельно таргеты, и все это связывается отдельными правилами "вот эти логгеры вот туда пусть пишут".
Очень удобно если логи в файлах.
309 2614432
>>14405

>Формочки научат MVVM. Лица впф макак представили?


Я тебе расскажу про свое лицо: ему абсолютно поебать.
Там будет поддержка уровня поддержки бейсика. Формально прикрутят, но в целом всем насрать. Исправление каждой хуеты будешь по 5 лет ждать или не дождешься вообще.

Я понял, что ты вбросил ради рофла
310 2614434
>>14278
Ну, это не совсем настройки. У меня уже есть система внутренних конфигов. Здесь же "предпочтения пользователя".

Обмозговал твои слова. Может так сделать?
https://pastebin.com/08LNagUa

CommonPreferences, SettingsPreferences, ControlsPreferences - станут классами. UserPreferencesDefaults будет подставляться в рантайме в зависимости от типа билда.

Плюс внутри PreferencesContainer ещё буду хранить версию настроек. Бывает что-нибудь изменяется и нужно грамотно мигрировать настройки пользователя, иначе их придется сбросить и тогда игрок бомбанёт от того, что ему по новой всё настраивать.
311 2614472
>>14434
А че ты их просто в БД не хранишь?
Тогда у тебя не будет проблем ни с хранением, ни с извлечением, ни с изменением настроек.
2023-02-1716-36-15.png6 Кб, 625x182
312 2614474
>>14434
Наверно, я пока ничего не могу сказать.
А с классами, думаю, будет рациональнее.

>нужно грамотно мигрировать настройки пользователя


А это хранение предыдущих настроек предполагается в пределах одной сессии?

Может легче просто сохранять конфиги в новый файл, а затем удалять предущий? Во многих приложениях так бэкапы устроены.
1. Есть некий TempFile, который удаляется после сессии.
2. Либо всегда есть два файла — один рабочий, а другой Backup-версия.
Собсно пример на пикриле. Текущий файл переименовывается с префиксом "Backup_", а новая версия сохраняется под обычным названием.

И реализация этого не требует каки-то больших сил. Не надо городить внутри PreferencesContainer копии настроек, это мусор.
313 2614478
>>14474

>2. Либо всегда есть два файла


Чую, что когда буду изучать конфиги, там такой оции из коробки не будет.
314 2614841
В чем может быть причина?
Дефолтный логгер выводил логи по
Microsoft.Hosting.Lifetime и подобному.

Решил подключить Serilog, решил начать с простого. После чего перестало выводиться все, кроме того, что я укажу, хотя в джейсоне прописал пикрил 1.
"Override": {
"Microsoft": "Information",
"System": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}

Могу еще код показать, но он на бейсике, хотя там в принципе все тоже самое. Отваливается из-за host_Builder.UseSerilog, но если эту строку не писать, то работает и дефолтный логгер и серилог (каждый печатает свое).
2023-02-1721-39-22.png469 Кб, 1381x665
315 2614858
>>14841
А это где должно быть? В асп это что-то по умолчанию.
2023-02-1722-09-02.png77 Кб, 841x663
316 2614896
>>14841
>>14858
заработало, но с пикрил
Это же по сути одно и то же, но почему с первый
ReadFrom.Configuration не сработал, а второй сработал?
Что-то в конфигурациях недоставало?
317 2615004
>>14841
все твои проблемы от бейсика
ну я даже не знаю - у других просто нет таких проблем.
318 2615057
Что скажете об Avalonia XPF?
319 2615058
>>15057

> We enable WPF apps to run on macOS and Linux with our Fork of WPF, which allows us to maintain API compatibility. Avalonia XPF replaces the low-level WPF code (MilCore) with Avalonia UI.

320 2615109
Нубский вопрос по EF Core. У меня есть две энтити - юзер и эвент. Юзер может участвовать во многих эвентах, в эвенте, соответственно, может участвовать много юзеров. Получается many-to-many отношение. Пробовал сначала сделать в каждой энтити ICollection с типом противоположной, потом пытался сделать join-таблицу вручную. В обоих случаях все создается нормально, но в получившейся join-таблице метод OnDelete указан как Cascade. Правильно я понимаю, что при удалении одной энтити будут удалены и все связанные с ней? Например, с удалением эвента удалятся и все юзеры, которые являются его участниками? И если да, то как этого избежать, как изменить метод OnDelete на Restricted?
321 2615132
>>15109
Наоборот, при удалении юзера удаляется события, это же свойства FK
322 2615139
>>15132
Это же many-to-many? Чет я запутался. Попробую спросить проще и на более простом примере.

Есть студенты и есть курсы. Студент может посещать много курсов, на каждый курс ходит много студентов. Как реализовать это отношение с помощью EF Core, чтобы ничего не удалялось каскадно? То есть, если все студенты отписываются от курса, то курс все равно остается. Или если курс удаляется, то студенты тоже не удаляются.
323 2615273
>>10447
Да я вкурсе, я все изначально поставил в инсталере, перечитай мой пост - обосрались майки.
изображение.png1,2 Мб, 876x1166
324 2615550
Стоит читать ее?
325 2615681
>>15550
Похоже на страпон на веревочке.
326 2615693
>>15681
Тож подумал, что на дилдак какой-то похоже, а потом прочитал название и в принципе всё так и есть.
327 2615928
Аноны, есть какой-то стандарт размещения членов класса? Что должны идти первым? Поля -> Свойства -> События -> Конструктор -> Методы ?
image54 Кб, 823x1033
328 2615939
329 2615985
А можно в Serilog или где-то еще устанавливать шаблон вывода индивидуально для каждого уровня? Чет не нашел.

И в какие моменты используется Log.CloseAndFlush()?
2023-02-1822-38-45.png22 Кб, 1013x260
330 2616012
>>15985
Либо серилог ебанутый, либо я что-то делаю не так.

Один и тот же паттерн конфигурации вывода.
Если написан в json, то распознает табуляцию "\t", а через код не распознает.

Как удалять лог-файл при каждой сессии хрен знает. Типа удали напрямую, а если в имени лога автоматом генерируется дата? А для этого конфигурируй при помощи кода, а при помощи кода мы не можем конфигурировать, потому что идет по пизде разметка.

Боюсь имаджинировать как рабоатет Nlog.
331 2616032
>>15985
>>16012
Я определенно делаю не так.

Дело в том, что конфигурация логгера Serilog.LoggerConfiguration идет до метода .ConfigureAppConfiguration, в котором я конфигурирую сервисы. Там создается новый экземпляр ILogger и конфигурируется он там автоматически.

В итоге у меня создалось два логгера, которые еще и друг другу мешали, и что я пытался исправить при помощи Log.CloseAndFlush()

Только проблема осталась неясна. А как в список сервисов добавить готовый экземпляр логгера?
1603375086badcat.gif193 Кб, 720x720
332 2616044
>>16032
Итак,

Вот я конфигурирую логгер
Log.Logger = New Serilog.LoggerConfiguration().CreateLogger
Log — статический
в Log.Logger помещается новый экземпляр ILogger

В конфигураторе сервисов я пишу
services.AddSingleton(Log.Logger)
Разве сюда не должен помещаться мой экземпляр логгера?
Почему по факту при попытке от хоста поулчить сервис ILogger возвращается другой экземпляр?
333 2616132
>>16044
Короче, все зависит от порядка конфигураций.

- Сначала конфигурируется и создается логгер
- Затем добавляется в статическое поле Log.Logger
- Затем конфигурируются сервисы, где добавляется в коллекцию как синглтон этот самый экземпляр Log.Logger
- И только потом волшебное заклинание
host_Builder.ConfigureLogging(log_builder => log_builder.AddSerilog)
334 2616210
Чет мне лень учить впф, решил быстренько склепать приложение на виндовс формах.
Но тут вечная проблема с dependency injection, я короче, решил сделать чет похожее на mvp паттерн, но чтобы нормально внедрять зависимости создал фабрику для презентеров и получать форму через презентер, эт нормальный подход?
335 2616212
>>16210
Никто не запрещает, я делают подобное в своих хеллоуворлдах.
336 2616394
>>16210
но нормальнее понять WPF и все.
даже если писать в нем в стиле формочек
337 2616395
На собесах на джуна дают крутить в голове деревья? Сейчас решаю на литкоде задачи уровня easy/middle (если конечно она не на бинарные операции), но как доходит к деревьям, даже бинарным, и рекурсиям - ловлю дикие тормоза.
Есть ли где-то "туториал" как поставить драйвера на деревья?
338 2616399
>>16012

>Боюсь имаджинировать как рабоатет Nlog.



Нормально работает. Чуть проблемнее если нужна интеграция. Например асп.нет. Можно положить болт на местный ILogger и просто забыть про его существование (юзать NLog напрямую как его и юзают), а можно хотеть юзать ILogger и тогда нужно выхлоп этого логгера загонять в Nlog/Serilog) что тоже просто ведь это давно сделано и потому сворачивается в простое типа services.Add
app.Use
339 2616407
>>16395

>На собесах на джуна


Сейчас не существует собесов на джуна.
>>16395

>дают крутить в голове деревья?


Обычно нет. Обычно дают задачки на async/await или многопоточность. В стиле "Если мы вот ебанем несколько асинхронных методов, то что выполнится в первую очередь, что во вторую, а что вообще не успеет. И как исправить, чтобы было правильно"
Еще популярны задачки на linq. Причем с подковырками lazy вычислений.
Так же популярны задачи на рефакторинг. Дадут какой-нибудь дерьмовый класс и спросят что тебе в нем не нравится, как бы ты его переписал, какие бы паттерны применил и т.д.
340 2616476
>>16210
А как на любом уровне приложения грамотно завершить его?

Ну вот возникла у меня фатальная ошибка, что делать-то? До основания Application путь не близкий.
Или поэтому не плодят Try Catch?
Стикер255 Кб, 512x512
341 2616494
>>16399
Меня больше смущают причуды этого логгера.
Например в конфиге json распознаются \n, \t, а в конфиге кодом — нет.

Ограничил Microsoft.Hosting.Lifetime до уровня Error, а оттуда все равно выводятся логи, хотя лично мои логи ограничены. Почему? Хрен знает.
Причем пакеты Serilog.Sinks.Debug и Serilog.Sinks.File работают по разному при тех же конфигах. Почему-то Microsoft.Hosting.Lifetime не лезет срать в файл, если ограничить.

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

>юзать NLog напрямую как его и юзают


Необязательно пихать в сервисы? А как же хваленая DI замена сервисов на лету? Опять меня наебали сказками.
342 2616526
>>16476
Делаем сервис IApplictaion
343 2616533
>>15939
А в чём прикол размещать свойства и события уже после конструктора???
344 2616559
>>16494

>А как же хваленая DI замена сервисов на лету?


ну типа если у тебя логгер получаешь через DI то ты типа можешь его поменять на другой. Вот только зачем. Логгер это просто именованный источник событий и если тебе нужно чтобы он писал в другое место - ну так в другом месте и перенаправляешь вывод. А потому нет смысла его замены и логгеры можно создавать на месте.

я не приемлю логгер через конструктор. это засирание параметров, хз что делать если нужно вложенный логгер, нельзя дать нормальное имя.
345 2616562
>>16494
единственная причина мне смотреть на ILogger - если я хочу получить события которыми сам фреймворк в него какает. Тогда нужно заворачивать. Иначе нафиг он не нужен.
346 2616618
Можно вообще добавлять в IServiceCollection готовый экземпляр класса? У него нет никаких параметров в конструкторе.
347 2616639
348 2616682
>>16639
А как? Мне не дает это сделать.

Я взял и добавил в класс статическое свойство с ссылкой на рабочий экземпляр. Но AddSingleton не дает мне обратиться ни к одному свойству класса ApplicationManger. Вот так правильно:
services.AddSingleton(Of IApplicationService, ApplicationManger)
А так ошибка:
services.AddSingleton(Of IApplicationService, ApplicationManger.ActiveManager)

Не дает даже точку поставить — сразу ошибка
349 2616693
>>16682
С языком обосрался. Короче у меня эквивалент вот этого.
Работает:
services.AddSingleton<IApplicationService, ApplicationManger>();
Не работает:
services.AddSingleton<IApplicationService, ApplicationManger.ActiveManager>();
350 2616705
>>16693
опять ты что то мудришь
это же экземпляр. его передают как параметр

services.AddSingleton(obj);
services.AddSingleton<IMyInterface>(obj);
351 2616707
>>16705
Ах тыж, точно.
352 2616723
Раз заговорили о логах. Как быть с различными айдишниками, если их нужно писать в логи? И если при этом логи могут отправляться на сторонние сайты?

Вот думаю может использовать ассиметричное шифрование? В дебаг-моде данные будут логироваться в открытом виде. Если мне нужно будет чекнуть на сервере логи и определить ошибку связанную с конкретным аккаунтом, то я их расшифрую закрытым ключом.
Без названия (8).jpeg5 Кб, 231x218
353 2616726
354 2616732
>>16723
этого мало. шифруй все и еще скрывай сам сам факт логгирования. подмешивай /dev/random рэндомно, чтобы никто не смог расшифровать если у тебя ключ украдут.

А если серьезно, то в логах не должно быть чувствительной информации и айди к ним точно не относится - тем более если он внутренний с внешним не связать (хотя и это уже паранойя)
355 2616733
>>16732

> тем более если он внутренний с внешним не связать (хотя и это уже паранойя)


А если пользователь зарегистрировался на сайте через Facebook и я хочу залогировать этот момент вместе с Facebook ID? Или фейсбук айди лучше убрать нафиг?
356 2617245
>>16733
У этого пользователя должен быть какой-то внутренний Id в твоём приложении. Вот его в логи и пиши. А фейсбучный Id связывай с ним и храни где-то внутри программы в БД (если он тебе конечно нужен)
2023-02-2001-07-34.png136 Кб, 823x367
357 2617344
Короч, помните, я писал, что у меня была проблема, когда была куча сервисов, но никто из них не был инициатором?

Так вот есть в Microsoft.Extensions.DependencyInjection
метод ActivatorUtilities.CreateInstance, который делает определенный сервис активатором.

Непонятно чем это отличается от обычного вызова нужного сервиса. Видимо для сомневающихся, типа меня.
358 2617347
>>17344
... ах да, и тип вызываемого сервиса не должен быть интерфейсом, как на пикрил, а оригинальным классом. Это классическая ошибка.

Так, что использование данного подхода накладывает свои ограничения.
359 2617386
Подскажите аноны, хочу скачать веб страницу
проблема в том что сайт отдает html страницу сразу, и через пару секунд только подгружает в неё данные, видимо скриптами
Как можно решить эту проблему в webClient? или куда копать?
360 2617403
>>17386
Докатился до хромдрайвера вместо WebClient, судя по всему проблема решена
361 2617486
>>17344

>Непонятно чем это отличается от обычного вызова нужного сервиса


Обычный вызов сервиса не позволяет передать свои параметры. Это специальный утилитный метод для одноразового использования.

ты передаешь ей параметры и она заполняет конструктор параметрами из контейнера и твоими параметрами.

Для многоразового нужно использовать методы рядом вида ActivatorUtilities.CreateFactory
362 2617493
>>17347
Бляяяя, какая же это ебань.

Т.е. существует два ILogger — один от Serilog, другой Microsoft.Extensions.Logging.

Именно поэтому мне в дебаг срал майрософт, игнорировав ограничения уровней. Я использовал Serilog.ILogger затем .ForContext(typeof (T)), а дефолтный может на ходу получить ILogger<T>.

Дефолтный даже в сервисах прописывать не надо, хост его все равно выдаст, как и конфиги.
363 2617495
>>17486
Понял, интересно.
364 2617525
>>17493
Когда я вызываю IServiceProvider.Dispose, должен ли он автоматом диспозить сервисы?
365 2617592
загадка века:
Каст к IDisposable вызывает Dispose автоматом
366 2617658
Как заставить ебучий шарп освободить память, чтобы у меня прога не улетала в out of memory? Генерирую строку, потом из неё flowdocunent, из него xps document и наконец его в pdf. Нахуярил using у всех disposable объектов, вызываю сборщик, но один хуй память захламляется и всё
367 2617672
>>17594 (Del)
Короче при IServiceProvider.Dispose автоматом диспозятся все сервисы, кроме одного. Это я уже проверил, даже если это синглтон.

Суть моей проблемы:
Мне нужно закрыть приложение из любого сервиса. У меня есть условный базовый сервис ApplicationService у которого есть метод async Shutdown, который закрывает приложение, завершает соединение с именованным каналом + диспозит сервисы.

Я предполагал, что любой сервис, если ему надо закрыть приложение, обращается к IApplicationService.Shutdown, но сам сервис, вызывающий сей метод отказывается диспозиться. Хз как это разруливать. Так-то при закрытии приложения всё равно всё уничтожится, но что если мне надо задиспозить без закрытия приложения?

Сперва у меня было реализовано при помощи событий и все работало, но сама система подписок очень геморная. Это надо делать подписку на каждый сервис.
368 2617678
>>17658
Небось дрочеш используешь string?
А ты разве не знал, что любая операция со строками создает новый экземпляр строки?
Если ты PDF составляешь стрингами через всякие циклы, то я боюсь имаджинировать ебало твоего ПК.
369 2617691
>>17672

>но сам сервис, вызывающий сей метод отказывается диспозиться


почему?
371 2617705
>>17678
больше проблем от всяких MemoryStream, а не от строк.
372 2617708
>>17691
Я это и хочу выяснить.

Сервис не диспозился, поэтому я решил задиспозить его вручную перед строкой IServiceProvider.Dispose.

Я вызывал проблемный сервис и через каст IDisposable, вызывал метод Dispose. При этом сервис пытается диспозиться дважды. Я убираю вызов Dispose и использую каст к IDisposable — в итоге диспозится один раз. Тогда я решил просто получить от хоста сервис и у меня тоже вызывается диспоз.

Я не знаю что не дает ему диспозиться.
image129 Кб, 1720x636
373 2617709
Пытаюсь определиться с единым стилем логов. Какой вариант из трёх лучше? Пока думаю 3й оставить (комбинация 1 и 2), вроде лучше читается.

Основная загвоздка в отображении параметров:

[Payment] Initiate transaction with product 'coins_1500'. Order '435345345345'

[Payment] Initiate transaction. Product 'coins_1500'. Order '435345345345'

[Payment] Initiate transaction: product='coins_1500', order='435345345345'
374 2617710
>>17708
Сервис который просит выгрузки приложения ничем не отличается от других сервисов. Ведь IApplicationService.Shutdown не является блокирующим
2023-02-2015-23-15.png44 Кб, 876x204
375 2617714
>>17709
Мой стиль
376 2617717
>>17678
String использую один раз, он отжирает в районе 500 мб, дальше всякие методы из фреймворка XamlReader.Load, SaveAsXaml - что там у них в коде хуй знает
377 2617723
>>17717

>String использую один раз, он отжирает в районе 500 мб


Есть еще понятие страниц в памяти и прочего. Т.е. твой стринг может зарезервировать больше места.

Может тебе нужен массив? Или конвертировать как-то частями.
378 2617726
>>17723

>Может тебе нужен массив?


У меня выбора нет, string возвращает метод из dll
379 2617732
>>17726
Не забывайте про LOH же
380 2617749
>>17732
У меня и нет лохов, иначе их сборщик подчистил бы, скорее всего куча всякого мелкого говна
381 2617752
>>17749
С чего бы сборщику чистить LOH
LOH такая структура что выделишь ты объект на 100 мегабайт, потом его удалишь, объект исчезнет, а выделенная память останется.

GC не сжимает LOH самостоятельно. Его нужно об этом просить явно.

Потому и приходится использовать разные ChunkedList/ChunkedMemoryStream и Marshal.AllocHGlobal чтобы не быть лохом с LOH
2023-02-2015-53-06.png84 Кб, 1570x253
382 2617757
>>17710
Раз уж я настроил логгирование. Вот отчет с комментариями.
Синим подсвечено то, что пишет лог в пределах одного метода.
Т.е. видно, что метод ожидает завершения ShutdownAsync, хотя я не прописывал await.

Ща буду разбираться почему.
383 2617761
>>17752
И как это делать, если память жрут не твои методы, а кал из фреймворка?
384 2617762
>>17761
а dll нативная? может она не стринг возвращает?
385 2617765
>>17761
Я просто напомнил про LOH
Смотри же профайлером кто чего память, а не гадай
Если это LOH то Dispose не поможет, нуюны доп усилия

Но сначала профайлер
386 2617771
>>17762

>а dll нативная


Которая string возвращает это хуита из dot.liquid, остальные охуевшие методы из фреймворка

>может она не стринг возвращает?


Ну сигнатуру-то я вижу
2023-02-2016-18-10.png6 Кб, 493x80
387 2617780
>>17757
Хм, почему-то метод ShutdownAsync из другого сервиса не воспринимается асинхронным.
Для примера, WindowServiceCounter - асинхронный
388 2617783
>>17757
какой еще ShutdownAsync
зачем сервису ждать окончания Shutdown

любой код должен вызывать Shutdown() и забыть. Семантика как и у CancellationtokenSource.Cancel()
389 2617789
>>17783

>зачем сервису ждать окончания Shutdown


Так я специально писал так, чтобы он не ждал. Метод асинхронный, но вызывается без await.
А как еще? Вызывать синхронно?

>Семантика как и у CancellationtokenSource.Cancel()


Т.е. Async? Из ачем не токен, если я ничего не собираюсь отменять.
390 2617791
>>17789

>И зачем мне токен*

391 2617797
>>17765
Буду смотреть, хули остаётся
392 2617810
>>17789
ты же понимаешь что сервис который дергает Shutdown() НЕ ОТЛИЧАЕТСЯ от других сервисов? вообще ничем. А значит ты что то накосячил.

про семантику CancellationtokenSource.Cancel() я упомянул что у
Shutdown() должна быть такая же семантика - вызвал и ПОШЕЛ ДАЛЬШЕ.

>Метод асинхронный, но вызывается без await.


без реализации это ни о чем не говорит. До первого await в асинхронном методе он вызывается синхронно.

Впрочем даже тогда ничего не мешает вызвать Dispose.

А значит
а) сделай нормальную семантику. убери Async и пусть будет Shudown() (или любое другое типа стартшутдаун и тому подобное)
б) вызови Shudown из другого класса и смотри поведение.
393 2617851
>>17761
Писать свою либку. Нам в команде, к примеру, пришлось запилить свою внутреннюю либку для потокового парсинга/генерации Excel, так так все имеющиеся решения жрали ОЗУ как не в себя и отваливались по OOM на 10k строк. А у нас, бывает, пользователи и по 100-150k грузят. Нынешнее же решение вполне себя живет в подах с лимитом ОЗУ в 1Gb.
394 2617859
>>17810

>ты же понимаешь что сервис который дергает Shutdown() НЕ ОТЛИЧАЕТСЯ от других сервисов?


Отличается хотя бы апартаментным состоянием потока. Виндовс менеджер запускает окна и имеет STAThread. Соответственно остальные сервисы находятся в MTAThread и между собой проблем не имеют.

[DBG 17:13:29:877 WindowsManagement.WindowService] Apartment State Thread: STA
[DBG 17:13:30:025 Outliner.ApplicationManager] Apartment State Thread: MTA

При этом я напрямую запускал метод из другого потока и пох, за исключением игнора факта, что метод асинхронный. Вскрылось когда запустил Shutdown() через Task.Run() и прилетело исключение. Я нигде не указывал явно аргумент STAThread, оно как-то само.

Так щито теперь делать? не делать же все остальные сервисы под STA?
395 2617860
Как жто не существует собесов на джуна, а как устроиться на работу тогда?
396 2617874
>>17859

>апартаментным состоянием потока.


хз имеет к вызову Dispose?
но надеюсь метод Shutdown() НЕ делает сам работу по выгрузке приложения и Dispose, а является всего лишь что то типа
_cancellationTokenSource.Cancel()
_complettionTaskSource.TrySetResult()
_resetEvent.Set()
и так далее.
397 2617881
https://www.youtube.com/watch?v=w8rRhAup4kg

что думает тред об этом высере?
398 2617889
>>17860
Становись сразу мидлом.
399 2617897
>>17881
Думаю, что понял откуда последние пару лет в шарпе аномальное количество вкатунов 18-22 лет
image.png326 Кб, 905x517
400 2617901
>>17881
Этот чел владеет геймдев студией. На пике их самые лучшие проекты (из 150-ти штук).
Я думаю качество материала в видео примерно такое же.
401 2617907
>>17901
>>17897
пойдет для начального вката до понимания ссылок в шапке?
нужен просто толчок
402 2617994
>>17874
ССССССССУУУУУУУУУУУУУУУУУУККККККККККККККАААААААААААААААА
Целый день, блять. Целый ебаный день убил на ХУЙНЮ.

Все из-за одной строчки
ActivatorUtilities.CreateInstance<WindowService>(ServiceHost.Services)
вместо должного
ServiceHost.Services.GetService<IWindowService>

Я такой, значит, повторно пытаюсь получить у хоста WindowService, который на минуточку СИНГЛТОН, а он мне возвращает еще один экземпляр.
И все, кстати, у меня там в STAThread. Это Task.Run() запустил метод в MTA

>complettionTaskSource


Я так делал. Но я же могу тогда уж сразу юзать complettionTaskSource.TrySetResult(), вместо Shutdown()?
403 2618027
>>17881

>что думает тред об этом высере?


Скрыл из рекомендованного по двум причинам (даже не смотря ни секунды).
1. В названии написано "слив"
2. В названии написано "лучшего"

Я не домохозяйка, чтобы вестись на подобный байт инфоцыгана.
404 2618029
>>17907
А если в названии нет кричащих слов, то не интересно?
Ты хочешь 10 часов воды навернуть? Почему ты не хочешь загуглить что-то проще и попытаться хотя бы создать проект?
405 2618037
>>18029
В таких видосах скомпилирована минимальная инфа для толчка.
406 2618041
>>17994
Ну да. Откуда контейнеру знать про создание сервиса с помощью утилитного метода. Смысл утилитного метода - тупая фабрика, цель которой рокинуть параметры из контейнера в создаваемый объект и он знать не знает про время жизни создаваемого объекта

Я про то что цель метода applicationservice.shutdown всего лишь послать событие "тут попросили выгрузки " любым способом
А уже в нужном месте кто то ждет этого события и выгрузит в правильном контексте даже если это в том же классе

То есть дополнительный уровень косвенности похволит избежать возможных трудноуловимых проблем
407 2618048
>>18037
Хз, чел. Я вообще начинал со скриптов, я просто писал мелочи и постепенно продвигался дальше. Только потом начал писать самостоятельные программы.

SimpleCode смотрел?
https://youtu.be/KyFWqbRfWIA?list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N
408 2618051
>>18041
Кстати, подписка мне здесь больше нарвится именно в таком исполнении. Спасибо.
cMh2-tmWSEo.jpg77 Кб, 520x520
409 2618055
>>18037

>для толчка



Соглы
410 2618057
>>18048
100 роликов...
411 2618059
Здесь есть люди, которые разбираются в навигации по страницам приложения при помощи frame? Я не могу понять, почему у меня после перехода на другую страницу вью моделька предыдущей не удаляется. В этой вью модельке есть mediaelement, проигрывающий музыку, и эта самая музыка после перемещения продолжает играть.
Путем экспериментов с финализатором понял, что вью модель удаляется только после повторного захода на страницу и ухода с нее. Видимо где-то есть буфер, вмещающий одну страницу. Вопрос где.
412 2618066
>>18059
Frame для мазохистов
413 2618106
>>18059
Мало информации. Ты же высвобождаешь нужные ресурсы?
Ты контент старницы контролируешь? Можешь добраться до каждого итема? Или это какой-то хромиум?
414 2618123
>>18106

> Ты же высвобождаешь нужные ресурсы?


Что ты под этим подразумеваешь? При нажатии на кнопку я вызываю Frame.NavigateTo(targettype) и всё.

> Ты контент старницы контролируешь? Можешь добраться до каждого итема?


Да, да.
415 2618158
>>18123

>Что ты под этим подразумеваешь?


Реализация IDisposable и метод Dispose. В этом методе ты проходишься по всем вещам твоей страницы, которые GC не удаляет, потому что они по тем или иными причинам продолжают существовать. Например:
- Подписки на события (за исключением слабосвязанных — тех что создаются в XAML)
- Свойства с делегатами
- Bitmap-ы
- Скорее всего твой медиаконтент

Ты должен напрямую обратиться к плееру, и как минимум остановить его, отсоединить медиконтент, который он проигрывает.

У меня был случай, когда я активировал таймер, который срал в консоль. И я решил тупо очистить переменную, в которой находился экземпляр класса с запущенным таймером, присвоив null. А таймер продолжал срать в консоль, и пока он срет, CG не может удалить класс.

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

Умные люди используют лайфтаймы, чтобы меньше головной боли было с контролем всего этого, но это уже другой уровень.
2023-02-2023-07-54.png9 Кб, 965x164
417 2618215
Почему ругается? В печать норм выводит, все распознает.

Предупреждение CA2017 Количество параметров, указанных в шаблоне сообщения о ведении журнала, не соответствует количеству именованных заполнителей
418 2618350
>>18158
Я добавлял dispose, обнулял source у медиаконтента, всё одно. Более того, я сейчас просто убрал медиаконтент, и это никак не повлияло на общую ситуацию. То есть проблема явно где-то вне класса.
419 2618365
>>17851
Сомневаюсь, что я в одно ебало высру конвертер в xps и pdf, такие решения вполне себе за деньги продают
420 2618376
>>18215

Фигурные скобки не нужны - ты так один объект с 2 полями передаешь а не 2 параметра.
421 2618531
Ребят, работал кто с SOAP запросами?
Целую неделю ебусь, не могу понять как эту хуйню сделать.
Дали WSDL, добавил референс в проект, вроде заполнил все нужные данные, запускаю -- он мне на Security Header ругается.
В примерах запроса которые мне отправили заголовок вообще подписывается как я понял с помощью Х509 сертификата.
Все перегуглил, но все равно нихуя не понятно. Есть инфа как добавить сам заголовок, но как добавлять ПОДПИСАННЫЙ заголовок, так еще и с помощью сертификата (у меня он есть, я еще подписываю тело с его помощью)
Типа, если отдельно подписать и добавлять в заголовок то что подписывать то? Тело? Так оно уже подписано отдельно
422 2618721
>>18376
Это бейсик, так передается массив.
В общем, очередной глюк студии.
423 2618728
Всем доброго времени суток. Хочу написать класс-бд, в котором будет храниться статический лист. Потом для этого класса написать репозиторий для добавления/обновления и получения данных. Вопрос такой: куда этот класс положить, в слой DAL или куда его? На первом скрине - структура проекта, на втором скрине класс, который хочу порезать на класс-бд (статическое поле).
424 2618732
Вот если я пишу это
Environment.SetEnvironmentVariable("DOTNET_ENVIRONMENT", "Development")

Куда это сохраняется? Запускаю окно переменных среды: в пользовательских ничего нет, в системных тоже.
Что будет, если другое приложение напишет
Environment.SetEnvironmentVariable("DOTNET_ENVIRONMENT", "Production")
425 2618734
>>18733 (Del)
пасибо
426 2618765
И как мне применять миграции, если sqlite не поддерживает drop column и alter column?
427 2618783
Анон, будь добр, подскажи по LINQ.
Есть энтити User и UserInterest. У них отношения many-to-many, то есть в User лежит ICollection<UserInterest>, а в UserInterest ICollection<User>. В UserInterest есть проперти string UserInterestName. Также есть дтошка UserDto, где я обрезаю ненужные проперти. Но в нее добавлена новая: List<string> UserInterestNames.

Дальше делаю маппиннг с помощью автомаппера.
CreateMap<User, UserDto>()
.ForMember(dest => dest.UserInterestNames,
opt => opt.MapFrom(

И вот дальше я не понимаю, как написать запрос, чтобы вытащить все UserInterestName из ICollection<UserInterest> в виде List<string>, чтобы маппер их загнал в проперти в UserDto.
428 2619278
>>18765
Поддерживает
ALTER TABLE <TABLENAME> DROP COLUMN <COLUMNNAME>;
ALTER TABLE <TABLENAME> RENAME COLUMN <COLUMNNAME> TO <NEWCOLUMNNAME>;
429 2619293
>>19278
Только это поддерживается начиная с .net 5, а я на 3.1...
430 2619303
>>19293
мне всегда было интересно. почему люди мазохисты?
ну ладно переход с 4.8 на кор может быть проблемным, но с 3.1 до 7 поднять - просто сменить версию дотнета. (ну кроме WPF, там чуть чуть намутили, но кто пишет на WPF....кроме меня)
431 2619304
>>19303
Uwp не поддерживает версию выше 3.1
432 2619307
>>19304
А еще WPF ругают типа легаси
а он еще всех переживет )
433 2619416
>>19293
Значит делаешь миграцию как диды:
1) Create new table
2) Copy data
3) Drop old table
4) Rename new into old
434 2619455
>>19439 (Del)
Охуенно, ставить SQL Server ради десктопной утилиты.
435 2619460
>>19455
есть еще firebird как ембедед. Сильно лучше чем склайт, но файрберд.
Image 1.png1 Кб, 216x55
436 2619478
>>19468 (Del)
ну так то базы разные. первое - огрызок для "надо самый минимум", а второе - полноценная версионная база данных.

При закрытии sqlite журнал вливается в базу данных
Сделай в sqlite WAL mode (и не вливай журнал в базу) и размер то другим будет.

вот пик у меня прямо щас. после закрытия бд журнал конечно исчезнет потому что sqlite так задуман, а файрберд оптимизацией занимается по мере необходимости ибо как бы настоящая бд.
437 2619484
>>18783
Бумп. Перегуглил все интернеты, но так ничего и не нашел.
chat.png39 Кб, 849x531
438 2619635
439 2619727
Поясните про SetBasePath в ConfigurationBuilder.

Этим методом устанавливается путь к директории, из которой будут читаться сеттинги, куда будут сохраняться логи и т.д. Почему во всех туториалах прописывают Environment.CurrentDirectory — место откуда запускается приложение, ведь хранить данные в ProgramFiles не рекомендуется.

Разве это не должна быть какая нибудь AppData? Следом возникает второй вопрос. Есть appsettings.json с дефолтными настройками, а есть appsettings.Prodaction.json, appsettings.Development.json. Первый файл должен храниться в папке с приложением, два последних в AppData. Но с SetBasePath подразумевается, что все три файла должны находиться в одном месте.

Как это вообще происходит? При первом запуске приложения папка с юзердатой копируется в AppData и уже она ставится в качестве BasePath? Я никогда не видел нескольких файлов appsettings — этот файл всегда один, но в разных местах.
440 2619765
>>19635
Он пытался, но: "Missing map from System.Char to System.String. Create using CreateMap<Char, String>. Офк, создание такой мапы не помогает и ругается, что у string нет дефолтного конструктора. В SelectMany почему-то прилетает IEnumerable<char>, а не стринг.
441 2619768
>>19727
Environment.CurrentDirectory это не "где лежит ехешник"
это рабочая папка.
442 2619798
>>19768
А кто определяет где находится рабочая папка?
443 2619829
>>19798
портабельное приложение - папку ищем относительно ехешника

системное приложение - у нас есть папка /etc или ProgramData под виндой

пользовательское приложение - у нас есть профиль пользователя

сервис какой (тот же асп.нет приложуха) - пользователь решает где рабочая папка. А как он нам ее сообщит? через переменную окружения - вот и есть такая переменная. Если мы пишем батник какой то там ее прописываем эту папку, иначе она будет смотреть на system32 что ли. При запуске ручками она будет равна текущей папке где находится пользователь, что приводит к "не могу найти файл", но это проблемы пользователя.

так что где чего - зависит от типа приложения
444 2619833
>>19798
и конечно никто не запрещает тебе задать путь к конфигам относительно ехешника и попутно использовать заданную рабочую папку для рабочих файлов
445 2619865
>>19829
Это я всё понимаю. Вот если бы я не смотрел туторы по IConfiguration, все было бы проще.

Объясни мне логику пикрил. Почему у автора appsettings.json appsettings.Production.json находятся в одной куче? Это какой-то каргокульт ASP? Если что, это WPF-приложение и вряд ли оно портабельное.

Пользователь открывает условную CurrentDirectory, а там два файла
appsettings.json
appsettings.Production.json
Я такого нигде не видел. Мне предлагают вот это воспринимать как что-то естественное? А если CurrentDirectory удалится? Что делать?
446 2619876
>>19865
Мне бомбит, что все туторы сделаны по одному шаблону. Допустим это пользовательское приложение.
В моем понимании appsettings.json должен быть изолирован от изменений. Он должен находиться в папке с приложением.

В то время как appsettings.Production.json должен находиться в ProgramData или AppData. И не иметь ебанутой подписи Production

Кроме того. Мне сообщают, что если IConfiguration не находит файл appsettings.Production.json, он читает данные из appsettings.json.
Хорошо, а как быть с сохранением? appsettings.Production.json по прежнему отсутствует. Куда будет запись? В дефолтный файл? <сарказм> Охуенно! </сарказм>

И ответы на эти, казалось бы, базовые вопросы ни один тутор не дает.
447 2619880
>>19865
не понимаю вопроса
все эти development/production/(иногда staging) - самая что ни на есть норма. есть основной конфиг, а сверху мержится доп конфиг который зависит от окружения.

>А если CurrentDirectory удалится? Что делать?


а если удалить c:\windows? значит упадет с сообщением что файл не найден.

А то что у автора WPF - ничего не значит. значит он так решил. Это не по гайдам, но такая его хотелка. Чай не публичный софт делает. А значит делает как ему удобно.

>>19876
обычно это сервисы/вебсайты и тому подобное - там такое разделение норма. чел просто не хочет делать по другому. И нет никакого смысла файлы кидать куда то далеко чтобы потом ходить искать? зачем.
448 2619882
>>19876

>Хорошо, а как быть с сохранением


НИКАК. эта конфигурация не умеет сохранять. Конфиги правятся в блокнотике.
449 2619885
>>19876
Допустим, я хочу сделать так, как я сам себе это изначальн опредставлял.
В папке с приложением у меня хранятся дефолтные конфиги. При первом запуске я их копирую в AppData и устанавливаю эту папку как CurrentDirectory.
Дальше, если нужно сбросить конфиги, то я копирую из папки с приложением оригинал.

Тогда вопрос а НАХУЯ эта возня с appsettings.Production.json? В чем хитрый план?
450 2619891
>>19880

>самая что ни на есть норма


В вебе? Возможно, но я перелопатил все установленыне приложения у себя и не нашел подобного подхода.

>а если удалить c:\windows?


CurrentDirectory в данном случае это данные из AppData. Нафиг тогда бэкапы конфигов делают?

>А значит делает как ему удобно.


Это не единственный автор.
451 2619898
>>19882

>НИКАК. эта конфигурация не умеет сохранять.


Чет я погорячился, да.
452 2619902
>>19898
Умеет?
453 2619916
>>19885

>если нужно сбросить конфиги, то я копирую из папки с приложением оригинал.


да как угодно. фломастеры то разные.

> appsettings.Production.json? В чем хитрый план?


позволяет переопределять ключи из основного конфига в зависимости от окружения
https://learn.microsoft.com/ru-ru/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0#appsettingsjson

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

Пример - я разработчик у меня есть стейжинг сервер. на моей машине у меня локальная бд, на сервере своя - мне что каждый раз при заливке на стейжинг конфиг править? ну ок я могу добавить в игнор этот файл - значит мне при каждом его изменении ходить везде менять. Проще сделать переопределение.
Туда же и Production - без него выкатил я на сервер боевой, вбил пароли к бд и все - первый же апдейт легко может снести мои правки.
А так защита от дурака.

>CurrentDirectory в данном случае это данные из AppData


CurrentDirectory это рабочая папка и никакого отношения к AppData не имеет. AppData это специальная папка относится к профилю. CurrentDirectory это переменная окружения и позволяет пользователю ее переопределить. Нужно ли это каждый решает сам. Меня вот лично бесит когда софт засирает профиль - у меня десятки гигабайт кешей инсталлеров и прочей херни потому что "ну так решили".
Даже студия срет мама не горюй - в ней хоть можно выключить кеш пакетов и освободить несколько гигов на диске ц

>Нафиг тогда бэкапы конфигов делают?


бэкапы делают потому что бэкапы нужны ). это перпендикулярно

>Это не единственный автор.


да неважно сколько их. они ваяют свое и как считают нужным. Они считают что нафиг не нужен гуи для правки конфига и "юзеру нужно - блокноте подправит и никакой мультипользовательсковсти". Софт он ведь разный бывает.
454 2619964
>>19885
Чел, так делается в промышленном коде, который нужно постоянно разворачивать на разных стендах. Есть локальные стенды, есть тестовые, есть интеграционные, прелайв, продакшен и дохуя еще всяких. И для всех нужны разные конфиги. Поэтому проще создать пачку для всех и закидывать их либо скопом, либо каждому свой. Потому что никто не будет ебаться и каждый раз на своем стенде сидеть и править конфиг под него.
455 2620001
>>19916
Ты говришь с позиции веба, сложно это воспринимть.

>Туда же и Production - без него выкатил я на сервер боевой, вбил пароли к бд и все - первый же апдейт легко может снести мои правки.


Это характерно для веба? Хорошо. Если это спроецировать на десктоп, то у меня должно быть так:
appsettings.Backup.json (ну или вариации неминга)
appsettings.json

>Меня вот лично бесит когда софт засирает профиль


У меня не будет там тяжелых данных. Все тяжелое у меня временное и я буду срать этим в Temp. Где еще хранить сеттинги? В ProgramFiles? Как минимуму пользователя не будет уверенности, что там можно что-то править.

>CurrentDirectory это рабочая папка и никакого отношения к AppData не имеет.


Так если у меня в AppData хранятся и сеттинги и логи, то это же можно назвать рабочей папкой? Для чего она предназначена? Или это что-то из разряда, когда пользователь запускает FileDialog, который смотрит\меняет CurrentDirectory?
456 2620002
>>19964
Понял
457 2620021
>>19916

>Меня вот лично бесит когда софт засирает профиль


Иначе придется ебаться с правами доступа. Срать в мои документы — те же яйца (если они не переопределены).
458 2620037
>>20001

>Это характерно для веба?


это характерно если у тебя есть разные окружения где нужно запускать и не хочется пердолится с конфигами.

> Где еще хранить сеттинги?


где хочешь. смотри же на свой софт. Если он у тебя должен становиться в ProgramFiles то значит нужно класть туда где есть права на запись, а это профиль.
Иначе же - ну пусть рядом лежат, проще искать, легко снести все просто стерев папку.
каждому свое.

>>20021
и что с того. вон жетбрианс хранит инсталлеры в профиле. НАХРЕНА спрашивается. Есть же инсталлер что с веба скачали - зачем плодить дубли. И при этом удалить нельзя - сломается.
идиотизм. (а та же андроид студия - портабельная при этом)

Нужны права? так это ж инсталлеры блин. он все равно для их использования поднятие прав запросит и сорит ими при поднятых правах.
459 2620048
>>20001
рабочая папка это просто одна из переменных окружения. обычно указывает на текущую папку в шелле или же на какую то системную папку. ну и может быть переопределена ведь это переменная окружения.

И хорошо когда приложение не прибивается гвоздями, а позволяет настроить себя переменными окружения (особенно если это не десктопный софт)
изображение.png162 Кб, 1198x769
460 2620796
Всем ку. Имеется вот такой цикл(1 картинка), этот цикл заполняет поле inlineKeyButton. Вопрос такой: имеет ли смысл сделать поле inlineKeyButton static, чтобы вызвать цикл 1 раз и забыть, а потом inlineKeyButton копировать для каждого нового пользователя. Или операции копирования будет такой же ресурсозатратной, как и вызов цикла?
461 2620898
Аноны, нужна ваша помощь. У меня есть всплывающее окно с listview, чьи элементы содержат кнопки. Кнопки могут быть активны и не активны для каждого состояния свой цвет, реализовал через behavior, при чем они становятся неактивны при нажатии на них (и это работает прекрасно), а активируются в другом всплывающем окне. И вот с последним у меня проблемы. Когда всплывающее окно с кнопкам скрыто (visibility = collapsed), поведение не работает, следовательно цвета не обновляются. Как фиксить?
462 2620947
пробовал кто заниматься разработкой на юните на шарпе в макоси? Насколько больно?
463 2621134
>>20947
а ты ждешь ответа что "работать можно" или ожидаешь пожесчте (ибо маковод)?

всегда удивляет когда люди создают себе сложности сами
464 2621312
Почему народ массово пускают слюну на дискриминирующие объединения, чем не устраивает возврат нескольких out аргументов в try методе? До кучи пусть ещё этот трай возвращает не бул, а какой-нибудь частный енум. Штатно, быстро, понятно, ожидаемо. Нет, пипл хочет нового сахарка в свои смузи.
465 2621317
>>21312

>Почему народ массово пускают слюну на дискриминирующие объединения


Кто пускает? Кто 'массово'? Сам себе хуйню придумал и других ей доебываешь.
466 2621318
>>19303
Все эти Net7, NetCore и т.п. крайне отвратно работают с виндой по сравнению с нет фреймворком. Работа с COM-объектами стала в разы медленней, при этом постоянно возникает проблема корявого подсчёта ссылок и массовых утечек памяти, и приходится ещё и всё это руками делать, хуже чем на крестах писать.
Почему майки не смогли сделать сор таким же виндовс-френдли, как фреймворк, для меня загадка.
Если бы не новые фишки языка, не совместимые со старыми рантаймами, ни один разработчик по винду не полез бы в эту новомодную помойку.
image421 Кб, 1693x495
467 2621322
>>21317
Слы, бумерок консервированный, ты интернет вообще читаешь? Посмотри популярных блогеров и сишарп-инфлуенсеров. Это самая ожидамая приблуда грядущего дотнета.
468 2621389
>>21312
одно с другим вообще не связано.
469 2621614
>>21312

А чем структуры не устраивают? Да и вообще, это хрень какая-то.
470 2621623
>>21614
и структуры тут тоже не причем.
это расширение синтаксиса, а не новый тип
471 2621695
Дайте ссылку на API стандартной библиотеки или как она там называется в шарпе. Гуглеж не помогает, все что связано с C#/.NET это пиздец как все свалено в кучу.
перекат.webm3 Мб, webm,
1280x720, 0:08
473 2621872
Если есть предложения к следующему перекату, то кидайте. Может шапку обновить или ещё чего.
474 2621877
>>21872
1. Перекат будет после 1000 постов.
2. В шапке обязательно должно быть аниме
475 2621892
>>21872
Я, как ОП шапки, готов выслушать предложения и добавить их в свой личный пастбин. Можно добавить перформанс EFCore из .NET 7 vs .NET 6 (если кому не впадлу измерить), например вот такое для LINQ и Reflection есть. Если есть фотошоперы - фотошопьте аниме, иначе никакого переката.
это-я.webm1,8 Мб, webm,
1920x1080, 0:09
476 2621895
>>21877

>1. Перекат будет после 1000 постов.


Но тогда тред утонет! Все нормальные треды перекатываются после 500. А мы чем хуже.

>2. В шапке обязательно должно быть аниме


Это можно будет устроить.

>>21892

> иначе никакого переката


Так ты и так уже 2 треда не перекатывал, ленивец! Мне пришлось вытаскивать тред из помойки.
.png210 Кб, 512x512
477 2621897
А я вот заебался с этими json'ами и решил ini-лайк хуйнуть конфигурацию.
По дефолту - в /etc/appname/appname.conf кладу
Сразу миллиард проблем решил.
Во-первых, намного удобнее монтировать и если надо менять конфигурацию не залазя в контейнер, при этом мы не хотим все кишки наружу(да, это не проблема, но сам подход того что по дефолту майки считают что надо прямо с приложением держать - мне не нравился никогда)
Во-вторых, соблюдаем линуксовские договоренности и уважаем среду
В-третьих, сам json - уебищный формат для пользователя. Вот реально, как я заебался объяснять куда админ должен вписать какую хуйню, чтобы то что ему надо получилось. С ini-лайк форматами и возможностью закоментить-раскоментить - они как-то проще это все понимают

Короче. Ошибкой было использовать json как основной способ конфигурирования в .net core и тянется до сих пор.
image.png64 Кб, 643x330
478 2621898
>>21895

>Так ты и так уже 2 треда не перекатывал, ленивец


Да, есть такое, извиняюсь. Заработался-залиткодился. Можно еще пик добавить в шапку чтобы все ахуели с моих возможностей!
gj.gif1,6 Мб, 346x508
479 2621900
hi-hi-hi.webm284 Кб, webm,
1280x720, 0:02
480 2621905
>>21898

> image.png


Ты ступил на путь безумия.
image.png81 Кб, 250x367
481 2621906
Можно вот эту пикчу добавить, вытащил из одного из прошлых моих тредов. Вообще надо бы шапочку обновить, в ссылках нет смысла, всё равно никто не читает
482 2621910
>>21906
Хз, мне нравится нынешняя заглавная пикча треда. Я бы её сохранил для последующих тредов. Так C# тред сразу узнаётся среди других. А на твоей пикче слишком много деталей, суть теряется.
483 2621911
Вообще если есть фотошоп-кун или видеомейкер-кун то призываем для обновления шапки, можно вебм вставить даже какой-нибудь ахуенного шарпо-кода, такого еще ни у кого не было!
484 2621915
>>21910
Да, есть такое, мне кажется просто "C#" можно побольше сделать и выделить синим/фиолетовым, а нипонский текст вырезать.
485 2621917
Перекот пока не делаем, надо шапку сделать нормальную
486 2621936
>>21895

> Все нормальные треды перекатываются после 500. А мы чем хуже.


В том-то и дело, что лучше. Петухон и JS перекатывают после 500, потому что там тысячи вкатунов, и надо, чтобы каждый, кто видит первую страницу /pr/, видел эти треды и пытался вкатиться туда, не создавать шарпобогам конкуренцию. В шарпобоги знают про навигатор, откуда по тегу можно перейти в нужный тред.
488 2621943
>>21936
С конкуренцией успешно справляются колледжи и вузы. Потому что преподы сидят на шарпах еще со времен фреймворка
489 2621944
>>21940
Сойдёт.
490 2621947
>>21943
После колледжей и вузов вкатываются от силы 10% студентов, и то те, кто учился самостоятельно. Остальные наивно надеялись, что в вузе их научат программировать.
491 2621951
Считаю нам нужна вебмка в шапку чтобы выебнуться
muhahaha.webm661 Кб, webm,
744x416, 0:10
492 2621952
493 2622558
>>21947
А как научиться то? Что нужно делать?
image.png1 Мб, 1920x1080
Многоходовочка 494 2658829
Кароче план таков, пойду на курсы JS и потом уже парарелельно по чучуть буду учить c# в итоге с крежетом стану фулл стак через пару сотен лет

JS так как быстрее выучишься и пойти на работу сразу, ну и потом изучать c# потому что хочу работать в инди компании что разрабатывает игры на unity

какие водводные?
495 2658937
>>58829

>курсы JS


Не нужно. Твердо и четко.

>игры на unity


Выбери что-то одно Если хочешь веб. то лучше к джаваскрипту выучить что-то серверное, например php.
Если хочешь игры, то учи сразу сисярп.
Тред утонул или удален.
Это копия, сохраненная 18 июня 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски