День 1191.
Подборка тегов, используемых в постах на канале, чтобы облегчить поиск. Не могу гарантировать, что все 1190 постов идеально и корректно помечены тегами, но всё-таки, эта подборка должна помочь.
Общие
Эти посты на совершенно разные темы, помечены этими тегами только с целью различать общую направленность поста.
#ЗаметкиНаПолях – технические посты. Краткие описания теории, особенности языка C# и платформы .NET, примеры кода, и т.п.
#Шпаргалка - примеры кода, команды для утилит и т.п.
#Юмор – шутки, комиксы и просто весёлые тексты или ссылки на видео.
#Оффтоп – всё прочее.
Специализированные
Эти теги более тематические, выделяют основную тему поста.
#Карьера – советы по повышению продуктивности, карьерному росту, прохождению собеседований и т.п.
#Книги – обзоры книг, которые (чаще всего) я лично прочитал, либо ещё нет, но советую прочитать.
#Курсы – обзоры и ссылки на онлайн курсы.
#МоиИнструменты – различные программы, утилиты и расширения IDE, которые я использую в работе.
#ЧтоНовенького – новости из мира .NET.
Узкоспециализированные
Эти теги относятся к определённой узкой теме.
#AsyncTips – серия постов из книги Стивена Клири “Конкурентность в C#”
#AsyncAwaitFAQ – серия постов “Самые Частые Ошибки при Работе с async/await.”
#BestPractices – советы по лучшим практикам, паттернам разработки.
#DesignPatterns – всё о паттернах проектирования, SOLID, IDEALS и т.п.
#DotNetAZ – серия постов с описанием терминов из мира .NET.
#GC – серия постов “Топ Вопросов о Памяти в .NET.” от Конрада Кокосы.
#MoreEffectiveCSharp – серия постов из книги Билла Вагнера “More Effective C#”.
#Testing – всё о тестировании кода.
#TipsAndTricks – советы и трюки, в основном по функционалу Visual Studio.
#Quiz - опросы в виде викторины.
#97Вещей – серия постов из книги “97 Вещей, Которые Должен Знать Каждый Программист”.
#ВопросыНаСобеседовании – тег говорит сам за себя, самые часто задаваемые вопросы на собеседовании по C#, ASP.NET и .NET.
#ЗадачиНаСобеседовании – похоже на вопросы, но здесь больше приводятся практические задачи. Чаще всего это 2 поста: собственно задача и ответ с разбором.
#КакСтатьСеньором – серия постов «Как Стать Сеньором» с советами о продвижении по карьерной лестнице.
Помимо этого, можно просто воспользоваться поиском по постам и попробовать найти то, что вам нужно.
Подборка тегов, используемых в постах на канале, чтобы облегчить поиск. Не могу гарантировать, что все 1190 постов идеально и корректно помечены тегами, но всё-таки, эта подборка должна помочь.
Общие
Эти посты на совершенно разные темы, помечены этими тегами только с целью различать общую направленность поста.
#ЗаметкиНаПолях – технические посты. Краткие описания теории, особенности языка C# и платформы .NET, примеры кода, и т.п.
#Шпаргалка - примеры кода, команды для утилит и т.п.
#Юмор – шутки, комиксы и просто весёлые тексты или ссылки на видео.
#Оффтоп – всё прочее.
Специализированные
Эти теги более тематические, выделяют основную тему поста.
#Карьера – советы по повышению продуктивности, карьерному росту, прохождению собеседований и т.п.
#Книги – обзоры книг, которые (чаще всего) я лично прочитал, либо ещё нет, но советую прочитать.
#Курсы – обзоры и ссылки на онлайн курсы.
#МоиИнструменты – различные программы, утилиты и расширения IDE, которые я использую в работе.
#ЧтоНовенького – новости из мира .NET.
Узкоспециализированные
Эти теги относятся к определённой узкой теме.
#AsyncTips – серия постов из книги Стивена Клири “Конкурентность в C#”
#AsyncAwaitFAQ – серия постов “Самые Частые Ошибки при Работе с async/await.”
#BestPractices – советы по лучшим практикам, паттернам разработки.
#DesignPatterns – всё о паттернах проектирования, SOLID, IDEALS и т.п.
#DotNetAZ – серия постов с описанием терминов из мира .NET.
#GC – серия постов “Топ Вопросов о Памяти в .NET.” от Конрада Кокосы.
#MoreEffectiveCSharp – серия постов из книги Билла Вагнера “More Effective C#”.
#Testing – всё о тестировании кода.
#TipsAndTricks – советы и трюки, в основном по функционалу Visual Studio.
#Quiz - опросы в виде викторины.
#97Вещей – серия постов из книги “97 Вещей, Которые Должен Знать Каждый Программист”.
#ВопросыНаСобеседовании – тег говорит сам за себя, самые часто задаваемые вопросы на собеседовании по C#, ASP.NET и .NET.
#ЗадачиНаСобеседовании – похоже на вопросы, но здесь больше приводятся практические задачи. Чаще всего это 2 поста: собственно задача и ответ с разбором.
#КакСтатьСеньором – серия постов «Как Стать Сеньором» с советами о продвижении по карьерной лестнице.
Помимо этого, можно просто воспользоваться поиском по постам и попробовать найти то, что вам нужно.
1👍60👎1
День 1223. #МоиИнструменты
VoidTools "Everything"
Сегодня расскажу об очень полезной утилите, которую мне посоветовал коллега.
VoidTools "Everything"
"Everything" — это поисковая система для Windows, которая мгновенно находит файлы и папки по имени. В отличие от поиска Windows, "Everything" при открытии отображает все файлы и папки на вашем компьютере (отсюда и название). Вы вводите фильтр поиска, чтобы отфильтровать отображаемые файлы и папки.
"Everything" легковесный, индексирует только имена файлов и папок, и обычно для создания базы данных требуется несколько секунд. Более того, у утилиты есть панель превью, где вы можете посмотреть содержимое файлов.
Поиск практически мгновенный и невероятно удобный. Например, на картинке ниже я объединил в фильтрах через пробел значения
И ещё парочка «хаков» для улучшения работы.
Смотрим содержимое нестандартных файлов
Хотя "Everything" позволяет посмотреть содержимое множества разных типов файлов, в том числе текстовых, Microsoft Office, картинок, .cs файлов и т.п., некоторые могут не поддерживаться. Например, файлы
Горячая клавиша с использованием клавиши Windows
Можно назначить для нового поиска в "Everything" (да и для чего угодно ещё) горячую клавишу с кнопкой Windows, например,
Зайдите в
Перезагрузите Windows. После этого сочетание Win+S перестанет работать (если что, это глобальный поиск, его также можно открыть по
VoidTools "Everything"
Сегодня расскажу об очень полезной утилите, которую мне посоветовал коллега.
VoidTools "Everything"
"Everything" — это поисковая система для Windows, которая мгновенно находит файлы и папки по имени. В отличие от поиска Windows, "Everything" при открытии отображает все файлы и папки на вашем компьютере (отсюда и название). Вы вводите фильтр поиска, чтобы отфильтровать отображаемые файлы и папки.
"Everything" легковесный, индексирует только имена файлов и папок, и обычно для создания базы данных требуется несколько секунд. Более того, у утилиты есть панель превью, где вы можете посмотреть содержимое файлов.
Поиск практически мгновенный и невероятно удобный. Например, на картинке ниже я объединил в фильтрах через пробел значения
.csproj и имена папок (начиная с \), в которых это имя надо искать. Заметьте, что имена папок могут идти в любом порядке. Жирным в результатах подсвечены совпадения. Поиск можно настроить, отфильтровав по типу файла, добавив регулярные выражения и т.п. Отображение результатов также можно изменить.И ещё парочка «хаков» для улучшения работы.
Смотрим содержимое нестандартных файлов
Хотя "Everything" позволяет посмотреть содержимое множества разных типов файлов, в том числе текстовых, Microsoft Office, картинок, .cs файлов и т.п., некоторые могут не поддерживаться. Например, файлы
.csproj, как показано на картинке ниже. Чтобы это исправить, нужно внести небольшое изменение в реестр. Создайте файл <имя>.reg и добавьте в него следующее содержимое:REGEDIT4Сохраните файл. Затем двойным щелчком на файле внесите изменения в реестр. После этого этот тип файлов можно будет посмотреть в виде текста. Понятно, что это глобальная настройка отображения для Windows. "Everything" просто использует эти значения.
[HKEY_CLASSES_ROOT\.CSPROJ]
"Content Type"="text/plain"
"PerceivedType"="text"
Горячая клавиша с использованием клавиши Windows
Можно назначить для нового поиска в "Everything" (да и для чего угодно ещё) горячую клавишу с кнопкой Windows, например,
Win+S. Поэтому его можно отключить, добавив значение в реестр. Аналогично предыдущей, это глобальная настройка.Зайдите в
Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced и добавьте новое значение Expandable String Value с именем DisabledHotKeys и значением S.Перезагрузите Windows. После этого сочетание Win+S перестанет работать (если что, это глобальный поиск, его также можно открыть по
Win+Q). После этого в "Everything" зайдите в Tools > Options > General > Keyboard и задайте для File | New Search Window значение Win+S. Некоторые сочетания с клавишей Windows сработают и без изменений в реестре (например, Win+Y или Win+J). Однако, возможно, в будущем им в Windows будет назначено какое-нибудь действие, тогда они работать перестанут.👍6
День 1232. #МоиИнструменты
DataGrip
Мы в нашем чате частенько шутим на тему Visual Studio или Rider. В принципе, здесь предпочтения делятся почти поровну, и каждый пользуется тем, что ему больше нравится. Но вот относительно этого инструмента от JetBrains я должен сказать, что не видел ничего, даже близко похожего по функционалу!
Речь идёт об IDE DataGrip, предназначенной для работы с базами данных.
Вот в этом видео краткое (на 40 минут) описание того, что может эта IDE, и, я вам должен сказать, что 80% моих повседневных задач она намного упростит. Автозаполнение кода, поиск ошибок в запросах (например, отсутствующих объектов, неоднозначно указанных колонок или условий, которые всегда истины), рефакторинг запросов, автоматическое форматирование кода (которое можно экспортировать для создания стиля кодирования в команде). Помимо этого, есть какие-то уж совсем сумасшедшие вещи, типа, визуального сравнения (diff) результатов двух запросов, экспорта выделенных результатов в другую БД или локальной история изменений файлов и папок. Осталось запомнить, что она всё это умеет и применять)))
Есть один минус. 30-дневный триал доступен. А вот дальше, если вы в РФ, могут возникнуть проблемы с покупкой.
DataGrip
Мы в нашем чате частенько шутим на тему Visual Studio или Rider. В принципе, здесь предпочтения делятся почти поровну, и каждый пользуется тем, что ему больше нравится. Но вот относительно этого инструмента от JetBrains я должен сказать, что не видел ничего, даже близко похожего по функционалу!
Речь идёт об IDE DataGrip, предназначенной для работы с базами данных.
Вот в этом видео краткое (на 40 минут) описание того, что может эта IDE, и, я вам должен сказать, что 80% моих повседневных задач она намного упростит. Автозаполнение кода, поиск ошибок в запросах (например, отсутствующих объектов, неоднозначно указанных колонок или условий, которые всегда истины), рефакторинг запросов, автоматическое форматирование кода (которое можно экспортировать для создания стиля кодирования в команде). Помимо этого, есть какие-то уж совсем сумасшедшие вещи, типа, визуального сравнения (diff) результатов двух запросов, экспорта выделенных результатов в другую БД или локальной история изменений файлов и папок. Осталось запомнить, что она всё это умеет и применять)))
Есть один минус. 30-дневный триал доступен. А вот дальше, если вы в РФ, могут возникнуть проблемы с покупкой.
👍8
День 1293. #Оффтоп #МоиИнструменты
Notebook Editor для Visual Studio
Сегодня посоветую вам видео Скотта Хенсельмана https://youtu.be/WfozTizHMlM, в котором он рассказывает про расширение Jupiter Notebooks для Visual Studio.
Jupiter Notebooks – это смесь документа Word со средой исполнения. Если вам нужно научить кого-то языку, новому функционалу, попросить кандидата на интервью выполнить задание, либо просто описать, какие действия нужно сделать в программе. Вместо того, чтобы писать всё это в текстовом документе, откуда куски кода придётся копировать и вставлять в среду исполнения, используйте Jupiter Notebooks, где можно исполнять код прямо в документе.
Скотт рассказывает про инструмент на примере обучающих курсов от Microsoft по C# и Machine Learning.
На GitHub есть репозиторий с примерами использования https://github.com/dotnet/csharp-notebooks/
Источник: https://techcommunity.microsoft.com/t5/educator-developer-blog/using-visual-studio-notebooks-for-learning-c/ba-p/3580015
Notebook Editor для Visual Studio
Сегодня посоветую вам видео Скотта Хенсельмана https://youtu.be/WfozTizHMlM, в котором он рассказывает про расширение Jupiter Notebooks для Visual Studio.
Jupiter Notebooks – это смесь документа Word со средой исполнения. Если вам нужно научить кого-то языку, новому функционалу, попросить кандидата на интервью выполнить задание, либо просто описать, какие действия нужно сделать в программе. Вместо того, чтобы писать всё это в текстовом документе, откуда куски кода придётся копировать и вставлять в среду исполнения, используйте Jupiter Notebooks, где можно исполнять код прямо в документе.
Скотт рассказывает про инструмент на примере обучающих курсов от Microsoft по C# и Machine Learning.
На GitHub есть репозиторий с примерами использования https://github.com/dotnet/csharp-notebooks/
Источник: https://techcommunity.microsoft.com/t5/educator-developer-blog/using-visual-studio-notebooks-for-learning-c/ba-p/3580015
YouTube
Visual Studio Notebook Editor brings C# and .NET to Jupyter Notebooks - Learn To Code Interactively
Visual Studio Notebook Editor brings C# and .NET to Jupyter Notebooks - Learn To Code Interactively. Also Machine Learning and AI!
Install Notebook Editor Extension:
https://marketplace.visualstudio.com/items?itemName=MLNET.notebook
C# Notebooks Repo:…
Install Notebook Editor Extension:
https://marketplace.visualstudio.com/items?itemName=MLNET.notebook
C# Notebooks Repo:…
👍2
День 1405. #МоиИнструменты
Интеграционные Тесты ASP.NET Core с Помощью Alba
Alba — это небольшая библиотека, которая обеспечивает простое интеграционное тестирование маршрутов ASP.NET Core, полностью совместимая с NUnit/xUnit.Net/MSTest. Недавно вышедшая версия 7.1 поддерживает .NET 7, улучшила обработку JSON для конечных точек Minimal API и поддерживает составной тип содержимого форм.
Допустим, есть проект Minimal API:
Помимо GetAsText() есть другие полезные методы, вроде PostJson(), который использует конфигурацию сериализации JSON вашего приложения, если вдруг она у вас кастомизирована. Аналогично Receive<T>() использует сериализацию JSON вашего приложения.
Когда тест выполняется, он проходит через весь конвейер ASP.NET Core вашего приложения, включая любое зарегистрированное промежуточное ПО.
Альтернативным вариантом для теста может быть использование класса Scenario и его удобочитаемых методов:
Имейте в виду, чтобы ваши тесты «видели» ваш класс Program, вам нужно разрешить вашему тестовому проекту «видеть» ваш основной проект. Для этого в файл .csproj основного проекта добавьте:
Интеграционные Тесты ASP.NET Core с Помощью Alba
Alba — это небольшая библиотека, которая обеспечивает простое интеграционное тестирование маршрутов ASP.NET Core, полностью совместимая с NUnit/xUnit.Net/MSTest. Недавно вышедшая версия 7.1 поддерживает .NET 7, улучшила обработку JSON для конечных точек Minimal API и поддерживает составной тип содержимого форм.
Допустим, есть проект Minimal API:
var builder = WebApplication.CreateBuilder(args);Мы можем написать тест маршрута, вроде такого:
var app = builder.Build();
app.MapGet("/", () => "Hello, World!");
app.Run();
[Fact]Тест загружает ваше фактическое приложение, используя его конфигурацию, но используя TestServer вместо Kestrel в качестве веб-сервера.
public async Task sample_test()
{
// Здесь для примера хост создаётся внутри теста.
// В реальности это дорого,
// его лучше создать один на все тесты.
await using var host =
await AlbaHost.For<global::Program>();
var result = await host.GetAsText("/");
Assert.Equal(result, "Hello, World!");
}
Помимо GetAsText() есть другие полезные методы, вроде PostJson(), который использует конфигурацию сериализации JSON вашего приложения, если вдруг она у вас кастомизирована. Аналогично Receive<T>() использует сериализацию JSON вашего приложения.
Когда тест выполняется, он проходит через весь конвейер ASP.NET Core вашего приложения, включая любое зарегистрированное промежуточное ПО.
Альтернативным вариантом для теста может быть использование класса Scenario и его удобочитаемых методов:
await host.Scenario(_ =>Библиотека предлагает множество настроек и вариантов использования, которые можно посмотреть в документации.
{
_.Get.Url("/");
_.ContentShouldBe("Hello, World!");
_.StatusCodeShouldBeOk();
});
Имейте в виду, чтобы ваши тесты «видели» ваш класс Program, вам нужно разрешить вашему тестовому проекту «видеть» ваш основной проект. Для этого в файл .csproj основного проекта добавьте:
<ItemGroup>Источник: https://jeremydmiller.com/2022/11/28/alba-for-effective-asp-net-core-integration-testing/
<InternalsVisibleTo Include="[ИмяПроектаТестов]" />
</ItemGroup>
👍21
День 1442. #МоиИнструменты
Процессор JSON, Который Вам Пригодится
Обработка JSON — обычная задача в повседневной работе разработчиков. Мы привыкли работать с JSON, но иногда нам нужно что-то более динамичное и эффективное, чем System.Text.Json и Newtonsoft.Json. JMESPath — это мощный язык запросов, который позволяет вам выполнять задачи Map/Reduce декларативным и интуитивно понятным способом. Его можно использовать в .NET, см. JmesPath.Net.
JMESPath прост в использовании. Сам запрос представляет собой простую строку. Преимущество этого подхода заключается в том, что вы можете следовать принципу инверсии управления и предоставить своим пользователям контроль над написанием запросов JMESPath.
Например, Azure CLI использует параметр
Допустим, у нас есть какие-то данные в JSON в строковой переменной
Как видите, JMESPath неплохо решает проблемы динамической обработки JSON на основе пользовательского ввода. Он также имеет модель расширяемости (возможность писать свои функции), которая открывает массу возможностей.
Источник: https://dev.to/nikiforovall/introduction-to-jmespath-json-processor-you-should-definitely-know-2dpb
Процессор JSON, Который Вам Пригодится
Обработка JSON — обычная задача в повседневной работе разработчиков. Мы привыкли работать с JSON, но иногда нам нужно что-то более динамичное и эффективное, чем System.Text.Json и Newtonsoft.Json. JMESPath — это мощный язык запросов, который позволяет вам выполнять задачи Map/Reduce декларативным и интуитивно понятным способом. Его можно использовать в .NET, см. JmesPath.Net.
JMESPath прост в использовании. Сам запрос представляет собой простую строку. Преимущество этого подхода заключается в том, что вы можете следовать принципу инверсии управления и предоставить своим пользователям контроль над написанием запросов JMESPath.
Например, Azure CLI использует параметр
–query для выполнения запроса JMESPath к результатам выполнения команд.Допустим, у нас есть какие-то данные в JSON в строковой переменной
source:{
"balance": "$2,285.51",
"name": "Eva Sharpe",
"email": "evasharpe@zaggles.com",
"latitude": 46.325291,
"friends": [
{
"id": 0,
"name": "Nielsen Casey",
"age": 19
},
{
"id": 1,
"name": "Carlene Long",
"age": 38
}
]
}
Следующий код содержит запрос для его обработки. Он демонстрирует различные концепции, такие как проекция, фильтрация, агрегация, преобразование типов и т.д. Думаю, что синтаксис достаточно интуитивно понятен и не нуждается в объяснении:var expressions = new (string, string)[]Вывод
{
("scalar", "balance"),
("projection", "{email: email, name: name}"),
("functions", "to_string(latitude)"),
("arrays", "friends[*].name"),
("filtering", "friends[?age > `20`].name"),
("aggregation", "{sum: sum(friends[*].age)}"),
};
var parser = new JmesPath();
foreach (var (name, expression) in expressions)
{
var result = parser.Transform(source, expression);
Console.WriteLine($"{name}: {result}");
}
scalar: "$2,285.51"Итого
projection: {"email":"evasharpe@zaggles.com","name":"Eva Sharpe"}
functions: "46.325291"
arrays: ["Nielsen Casey","Carlene Long"]
filtering: ["Carlene Long"]
aggregation: {"sum":57}
Как видите, JMESPath неплохо решает проблемы динамической обработки JSON на основе пользовательского ввода. Он также имеет модель расширяемости (возможность писать свои функции), которая открывает массу возможностей.
Источник: https://dev.to/nikiforovall/introduction-to-jmespath-json-processor-you-should-definitely-know-2dpb
👍20
День 1444. #МоиИнструменты
Тестовые Контейнеры в C#/.NET
Многие приложения сильно зависят от реляционной базы данных. Ваше приложение использует сложные запросы, ограничения на данные и другие возможности реляционной базы данных. Это означает, что многое в поведении ваших приложений зависит от того, как действует база данных. Поэтому важно проводить тесты на реальной базе. Сегодня это легко сделать с помощью TestContainers.
TestContainers — это библиотека, которая запускает контейнеры Docker для ваших тестов и предоставляет множество настроек для баз данных.
Попробуем настроить тестовый контейнер с Microsoft SqlServer:
Посмотрим пример теста:
В TestContainers встроена поддержка многих баз данных в наследниках класса
Источник: https://www.gamlor.info/posts-output/2022-12-22-test-containers/en/
Тестовые Контейнеры в C#/.NET
Многие приложения сильно зависят от реляционной базы данных. Ваше приложение использует сложные запросы, ограничения на данные и другие возможности реляционной базы данных. Это означает, что многое в поведении ваших приложений зависит от того, как действует база данных. Поэтому важно проводить тесты на реальной базе. Сегодня это легко сделать с помощью TestContainers.
TestContainers — это библиотека, которая запускает контейнеры Docker для ваших тестов и предоставляет множество настроек для баз данных.
Попробуем настроить тестовый контейнер с Microsoft SqlServer:
// настройка БДЭтот код загрузит образ докера MS Server и запустит контейнер. Затем запросит строку подключения для этого контейнера и запустит тесты для него. Если не указать путь к образу, будет использован образ по умолчанию. Если предварительно настроенные контейнеры вам не подходят, вы можете запустить произвольный образ с базовым тестовым контейнером.
var dbConfig = new MsSqlTestcontainerConfiguration
{
Password = "Test1234",
Database = "TestDB"
};
// создание контейнера
var сontainer =
new TestcontainersBuilder<MsSqlTestcontainer>()
.WithDatabase(dbConfig)
.WithImage("mcr.microsoft.com/mssql/server:2022-latest")
.Build();
// и запуск
container.StartAsync().Wait();
Посмотрим пример теста:
record Dog (string Name, DateTime BirthDate);Что если убить процесс, который запускает тесты? Что произойдёт с контейнерами, которые он создал? На самом деле при запуске тестового контейнера создаётся два контейнера. Помимо запущенного вами, создаётся контейнер
using (var db = new SqlConnection(
container.ConnectionString))
{
db.Execute(@"CREATE TABLE Dogs(
BirthDate DATETIME NOT NULL,
Name VARCHAR(MAX) NOT NULL
)");
var born = new DateTime(2022, 12, 22);
db.Execute(@"
INSERT Dogs(BirthDate,Name)
VALUES(@BirthDate, @Name)",
new {
BirthDate = born,
Name = "Joe"
});
var dog = db.Query<Dog>(
@"SELECT * FROM Dogs")
.First();
Assert.AreEqual(born, dog.BirthDate);
}
// очищаем контейнер
container.DisposeAsync();
testcontainers/ryuk, который управляет всеми тестовыми контейнерами и выполняет очистку при сбоях.В TestContainers встроена поддержка многих баз данных в наследниках класса
TestcontainerDatabase. То же самое касается систем сообщений, которые являются наследниками TestcontainerMessageBroker. Всё это можно найти в документации.Источник: https://www.gamlor.info/posts-output/2022-12-22-test-containers/en/
👍29
День 1445. #МоиИнструменты
Используем Новинки Языка на Старых Платформах
Сегодня порекомендую вам интересное видео от Ника Чапсаса об использовании новейших функций языка C# в старых версиях платформы, например, в .NET Framework.
На самом деле, все функции можно использовать практически «из коробки», просто изменив версию языка на 11. Да, Visual Studio не даст вам этого сделать так просто, потому что она автоматом определяет версию языка по версии фреймворка. Но можно вручную отредактировать файл .csproj, указав нужную версию языка в блоке компиляции:
Добавить другие функции чуть сложнее. Например, чтобы использовать init-свойства, нужно добавить пустой класс IsExternalInit:
Все подробности в новом видео Ника https://youtu.be/RgKa-tjnUMA
Используем Новинки Языка на Старых Платформах
Сегодня порекомендую вам интересное видео от Ника Чапсаса об использовании новейших функций языка C# в старых версиях платформы, например, в .NET Framework.
На самом деле, все функции можно использовать практически «из коробки», просто изменив версию языка на 11. Да, Visual Studio не даст вам этого сделать так просто, потому что она автоматом определяет версию языка по версии фреймворка. Но можно вручную отредактировать файл .csproj, указав нужную версию языка в блоке компиляции:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">Только одно это действие уже позволит вам писать, например, top-level statements (т.е. обойтись без класса Program).
<PlatformTarget>AnyCPU</PlatformTarget>
…
<LangVersion>11.0</LangVersion>
</PropertyGroup>
Добавить другие функции чуть сложнее. Например, чтобы использовать init-свойства, нужно добавить пустой класс IsExternalInit:
namespace System.Runtime.CompilerServicesОднако и эту работу можно облегчить, просто добавив NuGet-пакет PolySharp.
{
public static class IsExternalInit { }
}
Все подробности в новом видео Ника https://youtu.be/RgKa-tjnUMA
👍12👎1
День 1457. #МоиИнструменты
Мониторинг Сайтов в UptimeRobot
Полезно знать, когда сайты, которые вы поддерживаете, не работают. Несмотря на то, что в ASP.NET Core есть встроенные способы проверки работоспособности, иногда нужно простое решение, которое требовало бы меньше кода, работало для произвольного количества сайтов, и просто уведомляло бы, когда сайт недоступен, и когда он снова онлайн.
UptimeRobot - полезный сервис мониторинга, который можно использовать бесплатно для 50 мониторов и при условии, что вам подойдёт 5-минутный интервал между проверками. Этого более чем достаточно для личных нужд. Кроме того, можно создать публичную страницу статуса (в бесплатной версии – на домене сервиса, в платной – на собственном), которой можно поделиться со всеми заинтересованными лицами (в отличие от стандартной панели мониторинга, которая доступна только при входе в систему). На этой странице можно выбрать мониторы, которые будут отображаться, внешний вид, задать логотип и т.п.
Сервис также предлагает платные планы, которые включают в себя больше мониторов, функции SSL, панели мониторинга для команд, расширенные настройки страниц статуса и многое другое.
Начать довольно просто. Вы создаёте учетную запись, а затем настраиваете свой первый монитор. Помимо обычной проверки статуса ответа HTTP можно использовать пинг, проверку определённого порта или ключевого слова - любого слова, которое должно (или не должно) присутствовать на странице сайта. Последний вариант полезен, если вы не просто хотите знать, что сервер ответил каким-то кодом успеха, а что вернулось фактическое содержимое страницы (или хотя бы какая-то важная его часть).
Каждый монитор может уведомлять одного или нескольких членов команды по электронной почте о недоступности сайта или когда он снова становится доступен.
У сервиса также есть приложения под Android и iOS, так что следить можно и с телефона. А если вы хотите отображать статус сайтов вашей команды на экране ТВ, даже в бесплатном варианте есть опция "TV Mode" (на картинке ниже).
Источник: https://ardalis.com/monitor-sites-with-uptime-robot-or-your-own-process/
Мониторинг Сайтов в UptimeRobot
Полезно знать, когда сайты, которые вы поддерживаете, не работают. Несмотря на то, что в ASP.NET Core есть встроенные способы проверки работоспособности, иногда нужно простое решение, которое требовало бы меньше кода, работало для произвольного количества сайтов, и просто уведомляло бы, когда сайт недоступен, и когда он снова онлайн.
UptimeRobot - полезный сервис мониторинга, который можно использовать бесплатно для 50 мониторов и при условии, что вам подойдёт 5-минутный интервал между проверками. Этого более чем достаточно для личных нужд. Кроме того, можно создать публичную страницу статуса (в бесплатной версии – на домене сервиса, в платной – на собственном), которой можно поделиться со всеми заинтересованными лицами (в отличие от стандартной панели мониторинга, которая доступна только при входе в систему). На этой странице можно выбрать мониторы, которые будут отображаться, внешний вид, задать логотип и т.п.
Сервис также предлагает платные планы, которые включают в себя больше мониторов, функции SSL, панели мониторинга для команд, расширенные настройки страниц статуса и многое другое.
Начать довольно просто. Вы создаёте учетную запись, а затем настраиваете свой первый монитор. Помимо обычной проверки статуса ответа HTTP можно использовать пинг, проверку определённого порта или ключевого слова - любого слова, которое должно (или не должно) присутствовать на странице сайта. Последний вариант полезен, если вы не просто хотите знать, что сервер ответил каким-то кодом успеха, а что вернулось фактическое содержимое страницы (или хотя бы какая-то важная его часть).
Каждый монитор может уведомлять одного или нескольких членов команды по электронной почте о недоступности сайта или когда он снова становится доступен.
У сервиса также есть приложения под Android и iOS, так что следить можно и с телефона. А если вы хотите отображать статус сайтов вашей команды на экране ТВ, даже в бесплатном варианте есть опция "TV Mode" (на картинке ниже).
Источник: https://ardalis.com/monitor-sites-with-uptime-robot-or-your-own-process/
👍11
День 1461. #МоиИнструменты
Полезные NuGet-Пакеты для Юнит-Тестирования
Помимо всем известных пакетов для юнит-тестирования, вроде Moq, NSubstitute или FluentAssertions, есть менее популярные, но оттого не менее полезные. Ниже приведу некоторые из них.
1. JustMock Lite
Это бесплатный пакет с открытым исходным кодом, который упрощает юнит-тестирование, простой в использовании, многофункциональный, мощный и гибкий. Он похож на Moq, но, как мне показалось, имеет более понятный fluent-API настройки и более богатую функциональность. JustMock Lite — бесплатная версия коммерческого продукта JustMock.
2. System.IO.Abstractions
В основе библиотеки лежат IFileSystem и FileSystem. Вместо прямого вызова таких методов, как File.ReadAllText, используйте IFileSystem.File.ReadAllText. Они имеют точно такой же API, который можно внедрять и тестировать. Библиотека также поставляется с набором тестовых помощников, чтобы избавить вас от необходимости имитировать каждый вызов для базовых сценариев. Они не являются полной копией реальной файловой системы, но помогут вам в тестах.
3. DeepEqual
Это расширяемая библиотека для глубокого сравнения. Чтобы проверить экземпляры объектов на равенство, просто вызовите метод расширения IsDeepEqual:
4. ObjectDumper.Net
Это утилита, предназначенная для сериализации объектов C# в строку для целей отладки и ведения журнала. Вы можете использовать её в любом проекте .NET, совместимом с PCL. ObjectDumper предоставляет два отличных способа визуализации объектов .NET в памяти:
- DumpStyle.Console: сериализует объекты в удобочитаемые строки, часто используется для записи сложных объектов C# в файлы журналов.
- DumpStyle.CSharp: сериализует объекты в код инициализатора C#, который можно использовать для повторного создания объекта C#.
5. MockHttp
Это тестовый слой для библиотеки Microsoft HttpClient. Он позволяет настраивать заглушки для HTTP-ответов и может использоваться для тестирования сервисного уровня приложения.
MockHttp определяет замену HttpMessageHandler, механизма, управляющего HttpClient, который предоставляет гибкий API конфигурации и предоставляет готовый ответ. Вызывающий объект (например, сервисный уровень вашего приложения) остается в неведении о его наличии.
Источник: https://blog.markoliver.website/Testing-In-Dotnet
Полезные NuGet-Пакеты для Юнит-Тестирования
Помимо всем известных пакетов для юнит-тестирования, вроде Moq, NSubstitute или FluentAssertions, есть менее популярные, но оттого не менее полезные. Ниже приведу некоторые из них.
1. JustMock Lite
Это бесплатный пакет с открытым исходным кодом, который упрощает юнит-тестирование, простой в использовании, многофункциональный, мощный и гибкий. Он похож на Moq, но, как мне показалось, имеет более понятный fluent-API настройки и более богатую функциональность. JustMock Lite — бесплатная версия коммерческого продукта JustMock.
2. System.IO.Abstractions
В основе библиотеки лежат IFileSystem и FileSystem. Вместо прямого вызова таких методов, как File.ReadAllText, используйте IFileSystem.File.ReadAllText. Они имеют точно такой же API, который можно внедрять и тестировать. Библиотека также поставляется с набором тестовых помощников, чтобы избавить вас от необходимости имитировать каждый вызов для базовых сценариев. Они не являются полной копией реальной файловой системы, но помогут вам в тестах.
3. DeepEqual
Это расширяемая библиотека для глубокого сравнения. Чтобы проверить экземпляры объектов на равенство, просто вызовите метод расширения IsDeepEqual:
bool result = obj1.IsDeepEqual(obj2);При использовании внутри теста вы можете вместо этого вызвать ShouldDeepEqual. Этот метод выдает исключение с подробным описанием различий между двумя объектами:
obj1.ShouldDeepEqual(obj2);Также библиотека имеет fluent-API для кастомизации сравнения (например, можно игнорировать отдельные свойства).
4. ObjectDumper.Net
Это утилита, предназначенная для сериализации объектов C# в строку для целей отладки и ведения журнала. Вы можете использовать её в любом проекте .NET, совместимом с PCL. ObjectDumper предоставляет два отличных способа визуализации объектов .NET в памяти:
- DumpStyle.Console: сериализует объекты в удобочитаемые строки, часто используется для записи сложных объектов C# в файлы журналов.
- DumpStyle.CSharp: сериализует объекты в код инициализатора C#, который можно использовать для повторного создания объекта C#.
5. MockHttp
Это тестовый слой для библиотеки Microsoft HttpClient. Он позволяет настраивать заглушки для HTTP-ответов и может использоваться для тестирования сервисного уровня приложения.
MockHttp определяет замену HttpMessageHandler, механизма, управляющего HttpClient, который предоставляет гибкий API конфигурации и предоставляет готовый ответ. Вызывающий объект (например, сервисный уровень вашего приложения) остается в неведении о его наличии.
Источник: https://blog.markoliver.website/Testing-In-Dotnet
👍20👎1