Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
🔍 Шпаргалка по рефлексии в C#
Рефлексия — это когда ты можешь во время выполнения программы подглядеть, что внутри класса, вызвать метод по имени или даже достучаться до приватного поля (немного читерства, но работает).
Получение типа:
Информация о типе:
Список методов:
Список свойств:
Создание экземпляра динамически:
Вызов метода через рефлексию:
Доступ к полю:
Доступ к приватному полю:
Вызов приватного метода:
Полезно для написания ORM, DI-контейнеров, сериализаторов.
🐸 Библиотека шарписта
#буст
Рефлексия — это когда ты можешь во время выполнения программы подглядеть, что внутри класса, вызвать метод по имени или даже достучаться до приватного поля (немного читерства, но работает).
Получение типа:
Type t = typeof(string); // по имени типа
Type t2 = "hello".GetType(); // у объекта
Type t3 = Type.GetType("System.Int32"); // по строке
Информация о типе:
Console.WriteLine(t.FullName); // полное имя типа
Console.WriteLine(t.Namespace); // пространство имён
Console.WriteLine(t.IsClass); // это класс?
Console.WriteLine(t.IsValueType); // это value-type?
Список методов:
foreach (var m in t.GetMethods())
{
Console.WriteLine(m.Name);
}
Список свойств:
foreach (var p in t.GetProperties())
{
Console.WriteLine($"{p.Name} : {p.PropertyType}");
}
Создание экземпляра динамически:
Type t = typeof(DateTime);
object obj = Activator.CreateInstance(t, 2025, 8, 19);
Console.WriteLine(obj);
Вызов метода через рефлексию:
Type t = typeof(string);
MethodInfo m = t.GetMethod("Contains", new[] { typeof(string) });
bool result = (bool)m.Invoke("ChatGPT", new object[] { "GPT" });
Console.WriteLine(result); // true
Доступ к полю:
class Person { public string Name = "Alice"; }
var p = new Person();
FieldInfo f = typeof(Person).GetField("Name");
Console.WriteLine(f.GetValue(p)); // Alice
f.SetValue(p, "Bob");
Console.WriteLine(p.Name); // Bob
Доступ к приватному полю:
class Secret { private int code = 1337; }
var s = new Secret();
FieldInfo f = typeof(Secret).GetField("code",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine(f.GetValue(s)); // 1337
Вызов приватного метода:
class Hidden { private void SayHi() => Console.WriteLine("Hi!"); }
var h = new Hidden();
MethodInfo m = typeof(Hidden).GetMethod("SayHi",
BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(h, null); // Hi!
Полезно для написания ORM, DI-контейнеров, сериализаторов.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Bash Советы
🔥 Автоматическая проверка и перезапуск упавших сервисов
Скрипт, который проверяет список сервисов и перезапускает их при необходимости.
📌 Как использовать:
1. Сохраните скрипт, например, в
2. Дайте права на выполнение:
3. Добавьте в
👉@bash_srv
Скрипт, который проверяет список сервисов и перезапускает их при необходимости.
#!/bin/bash
# автор: https://t.me/bash_srv
# Список сервисов для проверки
services=("nginx" "mysql" "ssh")
for service in "${services[@]}"; do
if ! systemctl is-active --quiet "$service"; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - $service не работает. Перезапускаем..."
systemctl restart "$service"
# Можно отправить уведомление в Telegram или email
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - $service работает."
fi
done
📌 Как использовать:
1. Сохраните скрипт, например, в
/usr/local/bin/service_check.sh
.2. Дайте права на выполнение:
chmod +x /usr/local/bin/service_check.sh
3. Добавьте в
cron
для регулярной проверки, например, каждые 5 минут:
*/5 * * * * /usr/local/bin/service_check.sh >> /var/log/service_check.log 2>&1
👉@bash_srv
Forwarded from .NET / C#
Новое тестирование в .NET: переход с xUnit на TUnit
TUnit — современный тестовый фреймворк для C# с поддержкой Native AOT, параллельного запуска и быстрой генерацией тестов. В статье рассказано, как и зачем переводить проекты с xUnit на TUnit, а также о первых опытах использования. Тестирование в .NET: переход на TUnit
Автор рассмотрел новый тестовый фреймворк TUnit и опыт миграции с xUnit, столкнувшись с ограничениями Verify для старых версий .NET. Переход прошёл гладко благодаря инструментам TUnit, открывая перспективы для будущих проектов.
Подробности: https://andrewlock.net/converting-an-xunit-project-to-tunit/
#en
@dot_net_c_sharp | Другие наши каналы
TUnit — современный тестовый фреймворк для C# с поддержкой Native AOT, параллельного запуска и быстрой генерацией тестов. В статье рассказано, как и зачем переводить проекты с xUnit на TUnit, а также о первых опытах использования. Тестирование в .NET: переход на TUnit
Автор рассмотрел новый тестовый фреймворк TUnit и опыт миграции с xUnit, столкнувшись с ограничениями Verify для старых версий .NET. Переход прошёл гладко благодаря инструментам TUnit, открывая перспективы для будущих проектов.
Подробности: https://andrewlock.net/converting-an-xunit-project-to-tunit/
#en
@dot_net_c_sharp | Другие наши каналы
Forwarded from ITLES | Уроки программирования
Postgres против Mongo
Очень много новичков начинают свой путь с MongoDB, жалуясь на то, что PostgreSQL — очень сложная база данных, и без неё можно обойтись.
Так ли это? Какие недостатки есть у MongoDB и у PostgreSQL, в какой ситуации лучше использовать Mongo, а в какой — PostgreSQL? На эти вопросы и дан ответ в интервью.
📂 Перейти к просмотру
ITLES – Курсы программирования
Очень много новичков начинают свой путь с MongoDB, жалуясь на то, что PostgreSQL — очень сложная база данных, и без неё можно обойтись.
Так ли это? Какие недостатки есть у MongoDB и у PostgreSQL, в какой ситуации лучше использовать Mongo, а в какой — PostgreSQL? На эти вопросы и дан ответ в интервью.
📂 Перейти к просмотру
ITLES – Курсы программирования
Forwarded from Точка входа в IT
Forwarded from .NET / C#
This media is not supported in your browser
VIEW IN TELEGRAM
GPT-OSS — первая открытая модель OpenAI после GPT-2, доступная для локального запуска. Модель габаритом 20B работает на 16 ГБ ОЗУ и подходит для приватных AI-приложений без облака. Microsoft показывает, как использовать её в C# с Ollama для офлайн-разработки.
Подробности: https://devblogs.microsoft.com/dotnet/gpt-oss-csharp-ollama/
#en
@dot_net_c_sharp | Другие наши каналы
Подробности: https://devblogs.microsoft.com/dotnet/gpt-oss-csharp-ollama/
#en
@dot_net_c_sharp | Другие наши каналы
Forwarded from IT Portal
This media is not supported in your browser
VIEW IN TELEGRAM
Наткнулся на очень годный интерактивный учебник по теории вероятностей и статистике
Внутри наглядные визуализации, интерактивчики и минимум сухой теории. Можно покрутить распределения, посэмплить выборки, поиграться с доверительными интервалами и наглядно увидеть, как это всё работает
Забираем тут, советую открывать с десктопа
@IT_Portal
Внутри наглядные визуализации, интерактивчики и минимум сухой теории. Можно покрутить распределения, посэмплить выборки, поиграться с доверительными интервалами и наглядно увидеть, как это всё работает
Забираем тут, советую открывать с десктопа
@IT_Portal
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
🐳 Как уменьшить размер контейнера
Приготовили два практичных профиля для запуска: минимальный размер для утилит и микросервисов без тяжёлой динамики, и быстрый старт для веб-API.
Никаких хаков — только поддерживаемые фичи .NET 8.
Рецепт 1 — Минимальный размер
Шаги:
• Включите тримминг и сборку в один файл.
• Соберите self-contained бинарь.
• Упакуйте в chiseled/runtime-deps образ.
csproj:
Dockerfile:
Важно: триммер удаляет неиспользуемый код. При рефлексии используйте атрибуты
Рецепт 2 — Быстрый старт
Шаги:
• Включите ReadyToRun.
• Соберите framework-dependent (меньше JIT при старте).
• Упакуйте в chiseled ASP.NET образ.
csproj:
Dockerfile:
Холодный старт:
Мини-усиление безопасности в Dockerfile:
Два профиля покрывают 80% кейсов: минимальный образ для утилит/микросервисов без тяжёлой динамики и быстрый старт для веб-API. Дальше — NativeAOT, если нужен экстремальный старт и размер.
🐸 Библиотека шарписта
#буст
Приготовили два практичных профиля для запуска: минимальный размер для утилит и микросервисов без тяжёлой динамики, и быстрый старт для веб-API.
Никаких хаков — только поддерживаемые фичи .NET 8.
Рецепт 1 — Минимальный размер
Шаги:
• Включите тримминг и сборку в один файл.
• Соберите self-contained бинарь.
• Упакуйте в chiseled/runtime-deps образ.
csproj:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>link</TrimMode>
<InvariantGlobalization>true</InvariantGlobalization>
<StripSymbols>true</StripSymbols>
</PropertyGroup>
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-jammy-chiseled AS final
WORKDIR /app
COPY --from=build /out ./
USER 10001
ENTRYPOINT ["./YourApp"] # self-contained бинарь
Важно: триммер удаляет неиспользуемый код. При рефлексии используйте атрибуты
DynamicallyAccessedMembers
, DynamicDependency
или дескриптор ILLink.Descriptors.xml. InvariantGlobalization=true
экономит место, но отключает локали ICU.Рецепт 2 — Быстрый старт
Шаги:
• Включите ReadyToRun.
• Соберите framework-dependent (меньше JIT при старте).
• Упакуйте в chiseled ASP.NET образ.
csproj:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PublishReadyToRun>true</PublishReadyToRun>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
<StripSymbols>true</StripSymbols>
</PropertyGroup>
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-chiseled AS final
WORKDIR /app
COPY --from=build /out ./
USER 10001
ENTRYPOINT ["dotnet", "YourApp.dll"]
Холодный старт:
docker run -p 8080:8080 app:test &
curl -w '\nTime: %{time_total}s\n' -s http://localhost:8080/health/ready -o /dev/null
Мини-усиление безопасности в Dockerfile:
# после COPY и USER
VOLUME ["/app/data"]
ENV ASPNETCORE_URLS=http://0.0.0.0:8080
# файловая система только для чтения
READONLY rootfs
Два профиля покрывают 80% кейсов: минимальный образ для утилит/микросервисов без тяжёлой динамики и быстрый старт для веб-API. Дальше — NativeAOT, если нужен экстремальный старт и размер.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Типичный программист
This media is not supported in your browser
VIEW IN TELEGRAM
Откопал мощный плагин для веба и SEO-оптимизации
Это расширение находит за вас ошибки на страницах, битые ссылки, косячные мета-теги и всякие другие мелочи, которые мешают сайту выбиться в топ. Плюс — сразу даёт рекомендации, как улучшить позиции сайта в поиске.
Вещь реально полезная, так что обязательно сохраняйте🍷
Это расширение находит за вас ошибки на страницах, битые ссылки, косячные мета-теги и всякие другие мелочи, которые мешают сайту выбиться в топ. Плюс — сразу даёт рекомендации, как улучшить позиции сайта в поиске.
Вещь реально полезная, так что обязательно сохраняйте
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from C# (C Sharp) programming
🚀 Хочешь масштабировать своё API по горизонтали? Без балансировщика нагрузки не обойтись.
Вот как быстро собрать свой на .NET с помощью YARP (Yet Another Reverse Proxy):
3 простых шага:
1. Установи библиотеку YARP (`Microsoft.ReverseProxy`)
2. Настрой YARP в
3. Укажи пути к downstream-сервисам
После этого твой прокси уже готов к работе — будет распределять трафик между сервисами.
Но это только начало. YARP мощный и расширяемый. Он поддерживает разные политики балансировки нагрузки прямо "из коробки":
▪
▪
▪
▪
▪
Автор статьи применил YARP для масштабирования нескольких приложений и делится опытом в полном гайде:
📖 Читай подробнее: https://milanjovanovic.tech/blog/horizontally-scaling-aspnetcore-apis-with-yarp-load-balancing
Вот как быстро собрать свой на .NET с помощью YARP (Yet Another Reverse Proxy):
3 простых шага:
1. Установи библиотеку YARP (`Microsoft.ReverseProxy`)
2. Настрой YARP в
Program.cs
и appsettings.json
3. Укажи пути к downstream-сервисам
После этого твой прокси уже готов к работе — будет распределять трафик между сервисами.
Но это только начало. YARP мощный и расширяемый. Он поддерживает разные политики балансировки нагрузки прямо "из коробки":
▪
Random
— случайный выбор ▪
RoundRobin
— по кругу ▪
LeastRequests
— к тому, у кого меньше всего запросов ▪
FirstAlphabetical
— по алфавиту ▪
PowerOfTwoChoices
— выбери лучший из двух случайных (дефолт)Автор статьи применил YARP для масштабирования нескольких приложений и делится опытом в полном гайде:
📖 Читай подробнее: https://milanjovanovic.tech/blog/horizontally-scaling-aspnetcore-apis-with-yarp-load-balancing
Forwarded from .NET / C#
Новый уровень отладки в Visual Studio с Copilot. Инструмент помогает быстрее находить ошибки, предлагает умные решения и анализирует производительность приложений в .NET, позволяя тратить меньше времени на дебаг и больше — на разработку. Подробнее в статье.
Подробности: https://devblogs.microsoft.com/dotnet/github-copilot-diagnostics-toolset-for-dotnet-in-visual-studio/
#en
@dot_net_c_sharp | Другие наши каналы
Подробности: https://devblogs.microsoft.com/dotnet/github-copilot-diagnostics-toolset-for-dotnet-in-visual-studio/
#en
@dot_net_c_sharp | Другие наши каналы
Forwarded from Точка входа в IT
Forwarded from C# (C Sharp) programming
🔍 NetSonar — инструмент для сетевой диагностики от sn4k3
NetSonar — это лёгкая и кроссплатформенная утилита, которая помогает диагностировать сеть, визуализировать данные и управлять сетевыми интерфейсами.
🧰 Возможности:
• Многопротокольные пинги: ICMP, TCP, UDP и HTTP — проверка доступности и измерение задержек
• Управление интерфейсами: просмотр IP‑конфигураций, статистики и управление адаптерами в реальном времени
• Сканирование сети: обнаружение устройств, подсетей и открытых портов
• Современный UI: интерфейс на Avalonia + SukiUI с тёмной темой и графиками
• Кроссплатформенность: работает на Windows, macOS и Linux (на базе .NET)
• Открытый код: лицензия AGPL‑3.0 — можно адаптировать и дорабатывать
🛠 Установка:
🔹 Windows:
🖥 Github
NetSonar — это лёгкая и кроссплатформенная утилита, которая помогает диагностировать сеть, визуализировать данные и управлять сетевыми интерфейсами.
🧰 Возможности:
• Многопротокольные пинги: ICMP, TCP, UDP и HTTP — проверка доступности и измерение задержек
• Управление интерфейсами: просмотр IP‑конфигураций, статистики и управление адаптерами в реальном времени
• Сканирование сети: обнаружение устройств, подсетей и открытых портов
• Современный UI: интерфейс на Avalonia + SukiUI с тёмной темой и графиками
• Кроссплатформенность: работает на Windows, macOS и Linux (на базе .NET)
• Открытый код: лицензия AGPL‑3.0 — можно адаптировать и дорабатывать
🛠 Установка:
🔹 Windows:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from C# 1001 notes
🔥 Хотите разобраться в ASP.NET Core на практике?
Репозиторий — это более 400+ римеров для всех версий ASP.NET Core (от 2.1 до 10 Preview).
Что внутри:
- Minimal API, Blazor, SignalR, gRPC
- Аутентификация, кэширование, health-checks
- Middleware, Razor Pages, HTMX и многое другое
Каждый пример запускается командой
⭐ Репо собрало уже 10k+ звёзд и считается одним из лучших ресурсов для изучения ASP.NET Core.
📌 Github
Репозиторий — это более 400+ римеров для всех версий ASP.NET Core (от 2.1 до 10 Preview).
Что внутри:
- Minimal API, Blazor, SignalR, gRPC
- Аутентификация, кэширование, health-checks
- Middleware, Razor Pages, HTMX и многое другое
Каждый пример запускается командой
dotnet watch run
и демонстрирует отдельную фичу. ⭐ Репо собрало уже 10k+ звёзд и считается одним из лучших ресурсов для изучения ASP.NET Core.
📌 Github
Forwarded from C# 1001 notes
⚡ В EF Core чаще всего используют два подхода:
- Database-First — быстрое создание моделей из готовой БД
- Code-First — проектирование схемы через C# классы и миграции
Но оба могут тормозить разработку при сложных связях и настройках.
👉 Есть третий путь — Model-First.
Вы визуально проектируете модель, а она автоматически превращается в EF Core сущности и схему БД.
🛠 Один из лучших инструментов — Entity Developer от Devart:
- drag-and-drop интерфейс вместо ручного кода
- меньше рутины и ошибок в конфигурации
- точная генерация кода и SQL-скриптов
- быстрее дизайн → генерация → обновление моделей
Меньше кода ✍️, больше скорости 🚀.
#dotnet #efcore #csharp #devtools
- Database-First — быстрое создание моделей из готовой БД
- Code-First — проектирование схемы через C# классы и миграции
Но оба могут тормозить разработку при сложных связях и настройках.
👉 Есть третий путь — Model-First.
Вы визуально проектируете модель, а она автоматически превращается в EF Core сущности и схему БД.
🛠 Один из лучших инструментов — Entity Developer от Devart:
- drag-and-drop интерфейс вместо ручного кода
- меньше рутины и ошибок в конфигурации
- точная генерация кода и SQL-скриптов
- быстрее дизайн → генерация → обновление моделей
Меньше кода ✍️, больше скорости 🚀.
#dotnet #efcore #csharp #devtools
Forwarded from C# 1001 notes
🔐 RBAC (Role-Based Access Control) в действии
Как работает RBAC:
- Роли получают набор разрешений
- Пользователи получают роли → а значит и разрешения
- Разрешения определяют, что пользователь может или не может делать
📌 Поток авторизации:
1. Пользователь проходит аутентификацию
2. Получает access token (JWT)
3. Делает API-запрос с токеном
4. Токен преобразуется в claims
5. Проверка прав (authorize)
6. Ответ API
⚡ Пример обработчика RBAC в C#:
}
Как работает RBAC:
- Роли получают набор разрешений
- Пользователи получают роли → а значит и разрешения
- Разрешения определяют, что пользователь может или не может делать
📌 Поток авторизации:
1. Пользователь проходит аутентификацию
2. Получает access token (JWT)
3. Делает API-запрос с токеном
4. Токен преобразуется в claims
5. Проверка прав (authorize)
6. Ответ API
⚡ Пример обработчика RBAC в C#:
internal sealed class PermissionAuthorizationHandler
: AuthorizationHandler<PermissionRequirement>
{
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context,
PermissionRequirement requirement)
{
HashSet<string> permissions = context.User.GetPermissions();
if (permissions.Contains(requirement.Permission))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
Forwarded from C# 1001 notes
Но это делает отладку в 10 раз проще.
Стандартный вид при отладке:
{Namespace.ObjectName}
Никакого контекста. Много путаницы.
Но всего одной строкой кода?
Теперь окно наблюдения показывает:
Order ORD-2025-002: Bob Evans - 89.50
Order ORD-2025-003: Maria Lee - 1200.00
В чём фишка?
Используйте
DebuggerDisplay
.Добавляете этот атрибут в начало класса, чтобы контролировать, как будет отображаться информация о классе при отладке.
В следующий раз, когда будете смотреть на
{Namespace.ObjectName}
, помните: так не обязательно должно быть.Please open Telegram to view this post
VIEW IN TELEGRAM