Обработка Markdown в C# (.NET): библиотеки и инструменты

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Markdown в C# (.NET): обзор библиотек и инструментов

Markdown — это легковесный язык разметки, который широко используется для форматирования текста в документации, README-файлах, блогах и чатах. В экосистеме C# (.NET) существует несколько мощных библиотек, которые позволяют парсить, обрабатывать и конвертировать Markdown в HTML и другие форматы. В этой статье мы рассмотрим наиболее популярные инструменты, их возможности и примеры использования.

Зачем нужна обработка Markdown в C#?

Современные веб-приложения, системы управления контентом (CMS) и редакторы кода все чаще используют Markdown как основной формат ввода. В C# (.NET) это может быть полезно для:

  • Генерации статического контента (документация, блоги)
  • Реализации WYSIWYG-редакторов с Markdown-поддержкой
  • Импорта/экспорта данных из внешних систем (GitHub, Reddit, Stack Overflow)
  • Конвертации Markdown в PDF, DOCX или LaTeX через промежуточный HTML

Основные библиотеки для C# (.NET)

1. Markdig

Markdig — это самая популярная и производительная библиотека для работы с Markdown в .NET. Она поддерживает CommonMark, GFM (GitHub Flavored Markdown) и множество расширений: таблицы, списки задач, автозамену ссылок, математические формулы (через MathJax) и многое другое.

Установка:

// Через NuGet Package Manager
Install-Package Markdig

// Или через .NET CLI
dotnet add package Markdig

Пример использования:

using Markdig;

string markdown = @"
# Заголовок первого уровня

**Жирный текст** и *курсив*.

- Элемент списка 1
- Элемент списка 2

> Цитата

```csharp
Console.WriteLine(""Hello, World!"");
```";

// Конвертация в HTML с расширениями GFM
string html = Markdown.ToHtml(markdown);

Console.WriteLine(html);

Расширенные возможности:

// Настройка конвейера с дополнительными расширениями
var pipeline = new MarkdownPipelineBuilder()
    .UseAdvancedExtensions() // Включает все популярные расширения
    .UseMathematics()        // Поддержка LaTeX-формул
    .UseEmojiAndSmiley()     // Эмодзи :smile:
    .Build();

string htmlWithExtensions = Markdown.ToHtml(markdown, pipeline);

2. CommonMark.NET

CommonMark.NET — это строгая реализация спецификации CommonMark (стандарт Markdown). Библиотека легковесна, не имеет зависимостей и идеально подходит для проектов, где важна совместимость с эталонной реализацией.

Установка:

Install-Package CommonMark.NET

Пример использования:

using CommonMark;

string markdown = "Привет, **мир**!";
string html = CommonMarkConverter.Convert(markdown);

// Результат: <p>Привет, <strong>мир</strong>!</p>

3. MarkdownSharp

MarkdownSharp — это порт оригинального Markdown-процессора на C# от Jeff Atwood (сооснователь Stack Overflow). Библиотека устарела, но все еще используется в старых проектах. Поддерживает только базовый синтаксис без расширений.

Install-Package MarkdownSharp
using MarkdownSharp;

var markdown = new Markdown();
string html = markdown.Transform("**Hello**");

Дополнительные инструменты

4. HtmlSanitizer (для безопасного вывода)

При конвертации Markdown в HTML и последующем выводе на веб-страницу важно очистить результат от потенциально опасных тегов (XSS-атаки). Используйте библиотеку HtmlSanitizer:

Install-Package HtmlSanitizer

using Ganss.XSS;

var sanitizer = new HtmlSanitizer();
string rawHtml = Markdown.ToHtml("<script>alert('xss')</script>");
string safeHtml = sanitizer.Sanitize(rawHtml);

5. ReverseMarkdown (HTML → Markdown)

Если вам нужно преобразовать HTML обратно в Markdown, используйте ReverseMarkdown:

Install-Package ReverseMarkdown

using ReverseMarkdown;

var converter = new Converter();
string markdown = converter.Convert("<p>Hello <strong>World</strong></p>");
// Результат: Hello **World**

Сравнение библиотек

Библиотека Поддержка

Рекомендаций