.NET
Общее описание
.NET — это бесплатная, кроссплатформенная и высокопроизводительная платформа с открытым исходным кодом для разработки программного обеспечения, созданная Microsoft. Она поддерживает несколько языков программирования, включая C#, F#, VB.NET, а также богатую экосистему библиотек и инструментов.
Основные особенности:
- Кроссплатформенность (Windows, Linux, macOS)
- Поддержка современных веб-стандартов
- Высокая производительность
- Сильная типизация и безопасность
- Поддержка ASP.NET Core, Blazor, MAUI, WPF, WinForms и т.д.
- Интеграция с Visual Studio, VS Code и другими IDE
- Поддержка контейнеризации и облачных решений (Azure, AWS)
Версии .NET
Версия | Год выпуска | Тип | Примечания |
---|---|---|---|
.NET Framework | 2002 | Только Windows | Устаревшая, используется в legacy проектах |
.NET Core | 2016 | Кроссплатформенный | Заменён на .NET 5+ |
.NET 5 | 2020 | Единая платформа | Начало унификации |
.NET 6 | 2021 | LTS | Long-Term Support |
.NET 7 | 2022 | STS | Standard Term Support |
.NET 8 | 2023 | LTS | Последняя стабильная версия с поддержкой до 2026 |
Рекомендуется использовать .NET 8, так как это последняя LTS-версия на момент написания.
Установка .NET
На Windows:
Скачайте установщик с https://dotnet.microsoft.com/download
Установите SDK или Runtime в зависимости от целей.
Проверка:
dotnet --version
На Ubuntu/Debian:
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-sdk-8.0
На CentOS/RHEL:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/$(rpm -E %{rhel})/packages-microsoft-prod.rpm
sudo dnf install -y dotnet-sdk-8.0
На macOS через Homebrew:
brew install --cask dotnet-sdk
Менеджеры версий
1. .NET Multi-platform Installer (dotnet-install scripts)
Позволяет устанавливать и переключать версии .NET без административных привилегий.
Скрипты доступны на GitHub:
https://github.com/dotnet/install-scripts
Основные компоненты .NET
1. CLI (.NET Command Line Interface)
Инструмент командной строки для управления проектами и пакетами.
Основные команды:
dotnet new console -n MyApp # Создать консольное приложение
dotnet build # Сборка проекта
dotnet run # Запуск
dotnet test # Запуск тестов
dotnet publish # Публикация
dotnet nuget push # Публикация пакета
2. C# (язык программирования)
Основной язык программирования для .NET.
Пример "Hello World":
using System;
class Program {
static void Main() {
Console.WriteLine("Hello, World!");
}
}
3. .NET Runtime
Отвечает за выполнение .NET-приложений. Включает JIT-компилятор, сборку мусора и другие компоненты.
4. Common Language Runtime (CLR)
Виртуальная машина, выполняющая IL-код (Intermediate Language).
5. Base Class Library (BCL)
Стандартная библиотека классов .NET.
Типы проектов в .NET
Тип | Описание |
---|---|
Console App | Консольные приложения |
ASP.NET Core Web App | Веб-приложения и API |
Blazor App | SPA с C# вместо JavaScript |
Class Library | Библиотеки классов |
WPF App | Приложения Windows Presentation Foundation |
WinForms App | Windows Forms приложения |
MAUI App | Кроссплатформенные мобильные и десктоп-приложения |
Xamarin App | Для мобильной разработки (устаревший) |
Worker Service | Фоновые сервисы |
Unit Test Project | Проекты для тестирования |
ASP.NET Core
ASP.NET Core — это модульная, высокопроизводительная фреймворк-система для создания веб-приложений и сервисов.
Основные компоненты:
- Kestrel — встроенный веб-сервер
- Middleware pipeline — система обработки запросов
- Razor Pages / MVC — модели представления
- Entity Framework Core — ORM для работы с базами данных
- SignalR — реальное время (чаты, уведомления)
- Identity — система авторизации и регистрации
Entity Framework Core
ORM для работы с реляционными и нереляционными базами данных.
Пример:
public class Blog {
public int Id { get; set; }
public string Name { get; set; }
}
public class BlogContext : DbContext {
public DbSet<Blog> Blogs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=TestDB;Trusted_Connection=True;");
}
}
Работа с файлами
using System.IO;
File.WriteAllText("test.txt", "Hello, World!");
string content = File.ReadAllText("test.txt");
Console.WriteLine(content);
Работа с JSON
using System.Text.Json;
var person = new { Name = "Alice", Age = 30 };
string json = JsonSerializer.Serialize(person);
var deserialized = JsonSerializer.Deserialize<dynamic>(json);
Работа с HTTP клиентами
using System.Net.Http;
using System.Threading.Tasks;
var client = new HttpClient();
var response = await client.GetAsync("https://api.example.com/data");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
Безопасность
Основные рекомендации:
- Использовать HTTPS
- Хранить секреты через Secret Manager или Azure Key Vault
- Использовать Identity для аутентификации
- Проверять входные данные
- Использовать Policies и Roles для контроля доступа
- Отключать отладочные страницы в production
Логирование и диагностика
Использование ILogger
:
public class MyService {
private readonly ILogger<MyService> _logger;
public MyService(ILogger<MyService> logger) {
_logger = logger;
}
public void DoWork() {
_logger.LogInformation("Doing work...");
}
}
Поддерживаемые провайдеры: - Console - Debug - EventSource - Azure Application Insights - Serilog - NLog
Тестирование
Юнит-тестирование:
- xUnit.net
- NUnit
- MSTest
Пример с xUnit:
public class MathTests {
[Fact]
public void Add_TwoNumbers_ReturnsSum() {
var result = 2 + 2;
Assert.Equal(4, result);
}
}
Запуск:
dotnet test
CI/CD и автоматизация
.NET активно используется в системах CI/CD: - GitHub Actions - Azure DevOps - GitLab CI - Jenkins - Docker - Kubernetes
Также можно использовать: - MSBuild — система сборки - dotnet CLI — управление проектами - NuGet — менеджер пакетов
Документирование
Swagger/OpenAPI:
Для API-проектов часто используется Swagger UI.
app.UseSwagger();
app.UseSwaggerUI();
XML Documentation:
Генерация XML-документации из комментариев:
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
Производительность и оптимизация
Рекомендации:
- Использовать Span
, Memory - Минимизировать аллокации памяти
- Использовать async/await
- Использовать IHttpClientFactory
- Использовать Caching
- Профилировать с помощью VisualVM, dotTrace, dotMemory
Поддержка и сообщество
Официальные источники:
- https://dotnet.microsoft.com
- https://learn.microsoft.com/en-us/dotnet/ — официальная документация