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

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

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

Начать курс

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

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

Популярные библиотеки для работы с Markdown в C#

Наиболее востребованные решения в .NET:

  • Markdig — современная, быстрая и полностью совместимая со спецификацией CommonMark библиотека. Поддерживает расширения (таблицы, зачеркивание, emoji, диаграммы и др.).
  • MarkdownSharp — легковесный парсер от Stack Overflow. Простой, но не поддерживает CommonMark и многие расширения.
  • CommonMark.NET — официальная реализация спецификации CommonMark. Хорошо подходит для строгой совместимости.

В этом руководстве мы сосредоточимся на Markdig, так как он является де-факто стандартом для современных .NET-проектов.

Установка Markdig

Добавьте пакет через NuGet Package Manager или .NET CLI:

dotnet add package Markdig

Или через Package Manager Console:

Install-Package Markdig

Базовое использование: конвертация Markdown в HTML

Самый простой сценарий — преобразовать Markdown-строку в HTML. Markdig делает это в одну строку:

using Markdig;

string markdown = "# Заголовок 1\n\nЭто **жирный текст** и *курсив*.\n\n- Элемент списка 1\n- Элемент списка 2";

string html = Markdown.ToHtml(markdown);

Console.WriteLine(html);

Результат:

<h1>Заголовок 1</h1>
<p>Это <strong>жирный текст</strong> и <em>курсив</em>.</p>
<ul>
<li>Элемент списка 1</li>
<li>Элемент списка 2</li>
</ul>

Работа с расширениями Markdig

Markdig поддерживает множество расширений. Чтобы их использовать, нужно создать pipeline:

using Markdig;
using Markdig.Extensions.Tables;

var pipeline = new MarkdownPipelineBuilder()
    .UseAdvancedExtensions() // включает все основные расширения
    .Build();

string markdown = "| Заголовок 1 | Заголовок 2 |\n|-------------|-------------|\n| Ячейка 1    | Ячейка 2    |";

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

Console.WriteLine(html);

Этот код сгенерирует HTML-таблицу. Можно подключать отдельные расширения: .UseTables(), .UseEmojiAndSmiley(), .UseTaskLists() и другие.

Конвертация HTML обратно в Markdown

Обратное преобразование (HTML → Markdown) не входит в стандартную поставку Markdig, но можно использовать библиотеку ReverseMarkdown:

dotnet add package ReverseMarkdown
using ReverseMarkdown;

var converter = new Converter();
string html = "<h1>Привет, мир!</h1><p>Это <strong>важно</strong></p>";
string markdown = converter.Convert(html);

Console.WriteLine(markdown);

Работа с файлами Markdown

Часто Markdown хранится в файлах. Пример чтения и конвертации:

using Markdig;

string filePath = "document.md";
string markdownContent = File.ReadAllText(filePath);
string htmlContent = Markdown.ToHtml(markdownContent);

File.WriteAllText("output.html", htmlContent);

Создание расширенного HTML с пользовательским pipeline

Вы можете тонко настроить pipeline для конкретных задач:

var pipeline = new MarkdownPipelineBuilder()
    .UseYamlFrontMatter()        // поддержка YAML метаданных
    .UseEmojiAndSmiley()         // поддержка эмодзи :smile:
    .UseTaskLists()              // чекбоксы [x] и [ ]
    .UseAutoLinks()              // автоматическое создание ссылок
    .UsePipeTables()             // таблицы с помощью |
    .Build();

string markdown = @"
---
title: Пример
author: PythonLib
---

# Статья

Привет! :wave:

- [x] Сделать задачу 1
- [ ] Сделать задачу 2

Посетите https://pythonlib.ru
";

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

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