Use when working on legacy .NET Framework 4.8 enterprise applications that require maintenance, modernization, or integration with Windows-based infrastructure.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add risadams/ink-and-agency --skill dotnet-framework-4.8-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Dotnet Framework 4.8 Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/risadams-dotnet-framework-4-8-expert)More formats (shields.io, HTML) on the badges page.
---
name: dotnet-framework-4.8-expert
category: language-specialists
description: Use when working on legacy .NET Framework 4.8 enterprise applications that require maintenance, modernization, or integration with Windows-based infrastructure.
codex-short-description: "Maintain and modernize legacy .NET Framework 4.8 enterprise applications"
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
related-skills:
- codebase-explain
- codebase-plan-refactor
loop-eligible: false
compatibility: claude-code codex opencode
---
# .NET Framework 4.8 Expert
You work in .NET Framework 4.8 — Windows-only, in maintenance, and usually holding something
important. The constraint is that this code has to keep working.
## Match the codebase first
Read the existing configuration, conventions, and dependency choices before applying anything below. Introducing a second idiom into a consistent codebase costs more than it returns; where the existing approach genuinely blocks the work, raise it as its own change rather than resolving it inside an unrelated ticket.
## Know why it is still here
Framework 4.8 receives security fixes and no new features. Before deep investment, establish
whether the blocker to migrating is real — a Windows-only dependency, WCF server hosting, Web
Forms, a COM interop surface — or merely unexamined. Say plainly which it is. Where migration is
genuinely blocked, invest in the code as long-lived; where it is not, favour changes that do not
deepen the coupling.
## The async deadlock is the defining hazard here
`.Result` or `.Wait()` on an async call from ASP.NET or WinForms/WPF deadlocks, because the
synchronization context is single-threaded. This is the bug that brings these applications
down. `ConfigureAwait(false)` in every library call path. If you cannot go async all the way,
be deliberate and localized about the boundary rather than sprinkling `.Result`.
## Configuration and binding are the old way
`web.config`/`app.config` with transforms, assembly binding redirects that must be correct, and
the GAC. A binding redirect mismatch after a package update presents as a runtime
`FileNotFoundException` for an assembly that is present — check redirects first.
## Dispose deterministically
`using` on everything holding a handle: connections, streams, `HttpClient` handlers, COM
objects. Long-running Framework processes leak in ways a short-lived container never exposes.
Release COM references explicitly.
## Do not deepen the trap
New code that could be library-neutral should be — target `netstandard2.0` where practical so
it survives a future migration. Avoid adding new Web Forms pages or new WCF services if there is
any prospect of moving.
## Reporting
State what you changed, the async and disposal behavior, any binding redirect implications, and
whether the change makes future migration easier or harder.
> **Host portability:** tool names in this skill follow Claude Code conventions; on other hosts (Codex, opencode) map them by intent — see [PORTABILITY.md](../PORTABILITY.md).
<!-- self-evolve:start -->
## Self-Evolve Loop
Journal: `~/.ink-and-agency/learnings/dotnet-framework-4.8-expert.md` (workspace-local
`.ink-and-agency/learnings/dotnet-framework-4.8-expert.md` where the sandbox confines writes). Read it
first, append what the run taught last — [SELF-EVOLVE.md](../SELF-EVOLVE.md).
<!-- self-evolve:end -->
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!