csharp
C# Conventions
Personal C# style, structure, and runtime conventions in one place: how code is shaped (naming, layout, syntax) and how it behaves (async, I/O, exceptions, logging, DI). Style is enforced by .editorconfig (Allman braces, 120-char line limit, file-scoped namespaces) and EnforceCodeStyleInBuild=true.
Formatting, naming, and language-feature style is authoritative in references/csharp-style.md (with the full canonical .editorconfig); the .NET Framework / C# 7.3 delta is references/net-framework-48.md. This file keeps the house rules those style docs do not cover - structure limits, member and constructor ordering, forbidden patterns, XML doc, and the runtime behavior below - and where it overlaps them, the style docs win. Above all of these, a project's own .editorconfig and its docs/PROJECT-CODE-STYLE.md are higher priority: where a project diverges from these general conventions, follow the project.
Floor: .NET 8 / C# 12. Every rule below assumes at least this target - TimeProvider, UnsafeAccessorAttribute, the static argument throw-helpers, and the C# 12 collection expressions / primary constructors are all in. Where a convention names a newer feature (C# 13 System.Threading.Lock, the field keyword), it flags the version inline; treat those as opt-in once the project's target moves up.
On a .NET Framework 4.8 (net48) codebase the C# 7.3 language ceiling, the polyfill packages, and the SynchronizationContext async caveat differ from this floor - those deltas are in references/net-framework-48.md.
Specialized concerns route through the dotnet router - one table mapping each area (concurrency, performance / memory layout, design patterns, serialization, DI registration, config binding, DDD, architecture, packaging) to its focused skill. Load the skill the router names; this file stays the style and runtime baseline only.