Ответы пользователя по тегу C#
  • Как обезопасить программу С# от взлома?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вообще раз уже допускается наличию сетевого соединения между клиентом и сервером, то напрашивается просто вынести все критические функции на сервер.

    Но я просто пытаюсь угадать что и от чего ты пытаешься защитить.
    Ответ написан
    Комментировать
  • Где принято хранить переменные окружения в ASP.NET Core?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Переменные окружения всегда хранятся в переменных окружения.

    .env-файл - это не переменные окружения, а конфиг, который потом должна подхватить программа и добавить данные из него в свои переменные окружения.
    В .NET есть пакет, который делает ровно это: https://www.nuget.org/packages/dotenv.net

    В .net для конфигов принято использовать классы и интерфейсы из Microsoft.Extensions.Configuration.
    Самый распространённый вариант конфига - файл appsettings.json.

    Если мне память не изменяет, то m.e.c по-умолчанию в asp net core настроен так, чтобы тащить конфиги из appsettings, переменных окружения, и аргументов командной строки.

    Отдельно можно ещё сделать интеграцию и с другими вариантами конфигурации при помощи "Configuration providers".

    Подробнее можно почитать в документации: https://learn.microsoft.com/en-us/aspnet/core/fund...
    Ответ написан
    Комментировать
  • Как разумно поставить себе начало в программировании (C++ и C#)?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. C++ - это не единственный способ хорошо понять, как работает компьютер. Раз уж это первый язык, то я бы смотрел сразу в сторону Rust, тк он также сразу учит тебя тому, как можно управлять памятью.

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

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

    4. Если хочешь начать карьеру с C++, то тут мастхев будет диплом какого-нибудь хорошего вуза, чтобы тебя рассматривали всерьёз. (тоесть закладывай ещё +3 года после окончания колледжа).
    Хотя опять же - начинать карьеру с C++ сейчас - это крайней сомнительный выбор, если не геймдев, конечно.
    Для джуна в принципе разницы нет - на любом стеке тебе будет крайне тяжело найти первую работу.
    Для опытного аналогично, но наоборот - на любом стеке, если он не совсем мёртвый, найти работу будет вполне реально. (в худшем случае пара месяцев на поиск наиболее вкусного предложения).
    Сам в вполне успешно получал оффер на такую экзотику, как F#, а сейчас вообще пишу на Rust.
    Ответ написан
    5 комментариев
  • Что такое сборка?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Ну сборка - это то что в dll-файле, да.

    Где ты прочитал о статических и динамических я не знаю, по тому загуглил сам.

    Статическая сборка - это такая, сборка, которая сохранена как dll-файл.
    Динамическая - которая создана при помощи System.Reflection.Emit и существует только в рантайме.
    Ответ написан
    Комментировать
  • Как реализовать ввод данных в приложение steam?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    стим умеет принимать логин и пароль через аргументы командной строки.
    steam.exe -login username password

    Однако, если тебе нужна какая-то автоматизация ради, например, продажи услуги смены региона (или чего-то ещё подобного), то логичнее выглядит аутентификация в браузере, а не в приложении.

    Ну и так как стим сделан на Qt и ещё обмазан повсюду html-ем, то System.Windows.Automation нормально работать не будет, так как просто не увидит никаких элементов управления.
    (Я бы попробовал через нажатия на tab переключаться между элементами)
    Ответ написан
  • Как правильно тестировать базу данных в .NET?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Вся логика выборок, фильтров и т.д. вынесена на уровень Storage Procedure, значит не получится создать тестовую БД с тестовыми данными.

    Это ещё почему? Во время прогона тестов поднимаете полноценную СУБД, которую заполняете всеми табличками и процедурами.
    Больше вариантов нет, если хочется этот слой протестировать.
    При наличии миграций - это не должно быть сильно сложно.

    В крайнем случае можно взять дамп продовой базы, вычистив все чувствительные данные.
    Ответ написан
    2 комментария
  • Что означает оператор => в linq c#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Это не оператор, а стрелочка, которая отделяет аргументы анонимной функции от её тела.
    https://learn.microsoft.com/en-us/dotnet/csharp/la...

    Тоесть вот такой код создаёт функцию с единственным аргументом num, которая возвращает значение выражения num != 2.
    num=>num!=2

    Ведь эта строка на много проще

    Нет, не проще.

    Выбирай:
    var noTwo = nums.Where(x=>x != 2);
    // или
    var noTwo=from num in nums
                      where num!=2
                      select num;
    Ответ написан
    Комментировать
  • Как понять что я выучил основы C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    CLR via C# открывай и иди по порядку, если хочешь глубже знать.
    Если прям минимальный минимум, то:
    1. Все стандартные управляющие конструкции: условия, циклы, итд.
    2. Типы: примитивные, ссылочные, значимые. Работа со строками.
    3. ООП: интерфейсы, наследование. Отличия между прямым и виртуальным вызовом
    4. BCL
    5. Linq: query синтаксис и через методы-расширения. Linq to IEnumerable, Linq to IQueryable и различия. Лямбды, делегаты, замыкания.
    6. Потоки, таски, async/await. Понимание различий между асинхронностью и многопоточностью. Синхронизация потоков.
    7. Всякие кишки: IL, рефлексия, emit, как работает JIT, как работает сборщик мусора.

    В принципе этого достаточно для уверенного использования
    Ответ написан
    6 комментариев
  • Почему не работают миграции при переходе на новый csproj формат?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вместо того чтобы использовать гайды, которые вышли 7 лет назад - попробуй Upgrade Assistant - он должен автоматически всё обновить
    https://learn.microsoft.com/en-us/dotnet/core/port...
    Ответ написан
    Комментировать
  • Как правильно сделать запрос gPRC Tinkoff.InvestApi методу GetTechAnalysis?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вроде же чёрным по белому написно:

    Conversion from DateTime to Timestamp requires the DateTime kind to be Utc (Parameter 'dateTime')


    Timestamp.FromDateTime(DateTime.Now)
    Вот тут надо UtcNow

    Timestamp.FromDateTimeOffset(new DateTime(2023,12,31)),

    и вот тут явно указать kind
    Ответ написан
  • Как сделать таймер?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Ответ написан
    Комментировать
  • Как правильно сформировать запрос Тинькофф API gRPC?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Примеры есть, если напишешь issue, то пример новый добавят рано или поздно.
    Для инструментов пример вот:
    https://github.com/RussianInvestments/invest-api-c...

    2. А что именно тебе нужно?
    Вот например:
    var settings = new Tinkoff.InvestApi.InvestApiSettings
    {
        AccessToken = "..."
    };
    var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings);
    var currencies = client.Instruments.Currencies();
    foreach (var currency in currencies.Instruments)
    {
        Console.WriteLine(
            $"{currency.Uid} {currency.Ticker} {currency.Name} {currency.Nominal.Units + currency.Nominal.Nano / 1000000000m} {currency.Nominal.Currency}");
    }


    PS: https://github.com/RussianInvestments/invest-api-c...
    Ответ написан
    1 комментарий
  • Не работает Visual Studio, начинающий изучатель C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Работает.
    2. Все ошибки перечислены внизу.
    Ошибка у тебя в том что ты методы пишешь в неймспейсе, а не в классе - смотри внимательно, как код пишет ведущий.
    Ответ написан
    5 комментариев
  • Почему всё выводится в одну строку?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Потому что Console.Write(ch);
    В консоли всего один курсор => после всех переносов будет всё в одну строку писаться.
    Ответ написан
  • Как правильно работать с зависимостями?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Если хочешь, чтобы в разных сервисах был один и тот же экземпляр, а не разные, то тогда тебе надо регистрировать как Scoped или Singleton.

    Transient - создаёт новый экземпляр каждый раз
    Ответ написан
    Комментировать
  • Как создать миграцию данных с изменением даты?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    В твоём случае Down будет пустой.
    Если хочется гарантировать откат - заводи колонку с флагом, где нужно дату вернуть на -infinity

    Ну или через бэкап можно восстанавливать
    Ответ написан
    Комментировать
  • Как работать с компилируемым языком?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    При запуске ide, сначала нужно собрать: shift + f10, следом каждый раз мне нужно нажимать ctrl + f5.

    В гугле file watcher - там я могу указать только путь до .exe файла, это не то.

    dotnet watch run есть и hot reload.
    https://www.jetbrains.com/help/rider/Hot_Reload.html
    https://blog.jetbrains.com/dotnet/2022/09/12/jetbr...
    https://learn.microsoft.com/en-us/dotnet/core/tool...
    Ответ написан
    1 комментарий
  • Что же такое Scoped жизненный цикл в ASP.NET?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    И как эти scoped объеты существуют в background сервисах?

    Никак. В рамках IHostedService никакой скоуп не создаётся - надо руками его создавать.
    Как подтверждение - при попытке зарезолвить Scoped - будет ошибка

    "Создается один объект при его запросе в рамках некой области, например http запроса, и в последующем выдается уже созданный в рамках этой области". Часто получал утверждение что неправильно, и непонятно что за область

    Странные челы какие-то. Вроде вполне корректный ответ, хоть и странно сформулированный.


    Scoped
    For web applications, a scoped lifetime indicates that services are created once per client request (connection). Register scoped services with AddScoped.

    In apps that process requests, scoped services are disposed at the end of the request.

    When using Entity Framework Core, the AddDbContext extension method registers DbContext types with a scoped lifetime by default.

    Note

    Do not resolve a scoped service from a singleton and be careful not to do so indirectly, for example, through a transient service. It may cause the service to have incorrect state when processing subsequent requests. It's fine to:

    • Resolve a singleton service from a scoped or transient service.
    • Resolve a scoped service from another scoped or transient service.

    By default, in the development environment, resolving a service from another service with a longer lifetime throws an exception. For more information, see Scope validation.
    Ответ написан
    Комментировать
  • Почему 0,5 округляется до чётного числа?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Это банковское округление называется.
    Нужно оно для повышения точности при обработке большого количества околослучайных чисел (когда количество чётных и нечётных +0.5 примерно равно)

    Если тебе такое поведение не нужно, то тогда просто передавай третий аргумент - там можно выбрать, как стоит округлять в такой ситуации.
    Ответ написан
    1 комментарий