# csharp-refactoring

Скилл проводит рефакторинг C#/.NET так, чтобы поведение кода не менялось: сначала классифицирует запрос, потом правит по биндингам и проверяет сборкой с тестами.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 1800 установок · ★ 5730
- Автор: dotnet
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/dotnet/skills/tree/HEAD/plugins/dotnet/skills/csharp-refactoring/SKILL.md
- Обновлён: 2026-10-24
- HTML: https://affpapa.org/nevibecode/skills/csharp-refactoring

## Что делает

Скилл делит запросы на два вида. Если просят переименовать, вынести, заинлайнить, схлопнуть дубли или осовременить код, он делает структурную работу. Если под видом рефакторинга приходит смена версии NuGet, новая фича или правка порога — это уже не рефакторинг, и скилл отвечает коротким отказом с указанием, в какой воркфлоу идти, например `dotnet-upgrade` для апгрейда пакетов.

Переименование идёт по биндингам, а не по тексту. Сначала находятся все ссылки на реальный биндинг, потом правка делается семантически: через рефакторинг IDE/Roslyn, затем через C# LSP из плагина `dotnet` (`findReferences`, `goToDefinition`, `rename`), затем через кодфиксы анализаторов. Обычный поиск с заменой — только когда область крошечная и каждый хит проверен. Все `partial`-объявления учитываются, а правится вход генератора, не `*.g.cs`.

Работа ограничена текущим воркспейсом: если это Git-чекаут, корень берётся через `git rev-parse --show-toplevel`, и поиск за его пределы не выходит. Git при этом не обязателен. Входной текст обрезан, так что про остальные разделы скилла судить не берусь. Для установки нужен Node.js с `npx` — команда тянет скилл прямо из репозитория `dotnet/skills`.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-refactoring -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/csharp-refactoring/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/csharp-refactoring/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-refactoring -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/csharp-refactoring/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-refactoring -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/csharp-refactoring/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install dotnet/skills csharp-refactoring
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/csharp-refactoring/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-refactoring -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/dotnet/skills --path plugins/dotnet/skills/csharp-refactoring
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/csharp-refactoring/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add dotnet/skills --skill csharp-refactoring -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/dotnet/skills/tree/HEAD/plugins/dotnet/skills/csharp-refactoring/SKILL.md

## Когда брать
- переименовать метод, не задев строки и комментарии с тем же словом
- вынести повторяющуюся логику из нескольких классов в одно место
- заменить внутреннюю обёртку-прослойку на прямой вызов
- развести в одном запросе структурную правку и смену поведения
- обновить имя члена, которое подтягивается через рефлексию или конфиг

## Примеры запросов агенту
- переименуй `OrderService.Calculate` в `ComputeTotal`, поведение не меняй
- вынеси дублирующийся код из `InvoiceBuilder` и `ReportBuilder` в общий метод
- заинлайни внутреннюю обёртку `LegacyHelper`, все вызовы переведи на целевой метод

## Похожие
- [modern-csharp](https://affpapa.org/nevibecode/skills/modern-csharp.md) — скилл · 2900 установок
- [code-review](https://affpapa.org/nevibecode/skills/codewithmukesh-code-review.md) — скилл · 2800 установок
- [modern-csharp-coding-standards](https://affpapa.org/nevibecode/skills/modern-csharp-coding-standards.md) — скилл · 2200 установок
- [csharp-concurrency-patterns](https://affpapa.org/nevibecode/skills/csharp-concurrency-patterns.md) — скилл · 1600 установок
- [csharp](https://affpapa.org/nevibecode/rules/csharp.md) — правило · ★ 40418
- [csharp-pro](https://affpapa.org/nevibecode/agents/csharp-pro.md) — субагент · ★ 41729

Из того же набора: [dotnet/skills](https://affpapa.org/nevibecode/by/dotnet/skills.md) — 101 карточка

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
