.NET Dotcore and Dotapps Architecture

VerifiedSafe

Organize .NET code into shared libraries (dotcore) and applications (dotapps) with strict dependency and naming rules. Ensure clean separation between reusable and application-specific code.

Sby Skills Guide Bot
DevelopmentIntermediate
306/2/2026
Claude CodeCursor
#dotnet#architecture#dotcore#dotapps#shared-libraries

Recommended for

Our review

This skill defines the architectural and organizational rules for .NET shared libraries (dotcore) and executable applications (dotapps), ensuring a clear separation of concerns.

Strengths

  • Enforces a clear and consistent project structure.
  • Prevents circular dependencies between applications.
  • Centralizes shared libraries in dotcore.
  • Facilitates code maintainability and scalability.

Limitations

  • Requires strict adherence to naming conventions.
  • Can be restrictive for small projects or prototypes.
  • Does not cover advanced build tool configuration.
When to use it

Use this skill when working on a .NET project with multiple applications sharing common libraries.

When not to use it

Avoid this skill if your project is a single application with no need for shared libraries or if you use a monolithic architecture.

Security analysis

Safe
Quality score92/100

This skill contains only documentation and project layout instructions with no executable commands, destructive operations, or data exfiltration risks.

No concerns found

Examples

New shared library in dotcore
Create a new .NET class library called DotCore.DataAccess under the dotcore folder. Follow the dotcore naming convention and ensure it references only DotCore.Foundations and DotCore.Common.
Add a new app in dotapps
Add a new application named 'DataProcessor' under dotapps. Create the project structure and add a project reference to DotCore.Utils. The namespace should be DotApps.DataProcessor.
Move shared code to dotcore
I have some utility classes used by both SimpleUi and Cli apps currently in SimpleUi. Move them to a new library DotCore.SharedUtils under dotcore, and update references accordingly.

name: dot description: When working on dotcore (shared .NET libs = public class libraries = pycore counterpart) or dotapps (runnable apps), follow layout, naming, and dependency rules. All shared libraries live in dotcore; apps reference only dotcore.

Dot Stack Skill (dotcore + dotapps)

Use this skill when editing or adding code under dotcore/ or dotapps/.

  • dotcore = .NET public class libraries (公共类库) = counterpart of pycore. All shared libraries used by more than one app (DotCore.Foundations, DotCore.Common, DotCore.Utils, DotCore.Infrastructure, DotCore.UIInspect, DotCore.UITheme, etc.) live here.
  • dotapps = runnable applications; they reference dotcore and, when needed, their own sub-app characteristic library (子APP的特征类库) under dotapps/<App>/ (e.g. dotapps/d3check/D3CheckCore/). No app-to-app references.

Canonical spec: development-guides/DOT_ARCHITECTURE.md. Cursor rule: .cursor/rules/dot.mdc. UI (WPF/MAUI/Blazor/Avalonia): canonical spec development-guides/DOT_UI_PROJECT_SPECIFICATION.md, .cursor/rules/dot-ui.mdc. Progress and pycore↔dotcore mapping: dotcore/DOT_PUBLIC_LIBRARY_PROGRESS.md.

When to Use

  • Editing or adding code under dotcore/ (any DotCore.* project or tests).
  • Editing or adding code under dotapps/ (SimpleUi, Cli, CallModule, d3check, or any new app).
  • Adding a new shared library (as a new DotCore.* under dotcore) or a new app (under dotapps).
  • Choosing where to put types, utilities, or config used by multiple apps (dotcore, not dotapps).

Instructions

1. Layout: all shared libs in dotcore, apps in dotapps

  • dotcore/ = shared class libraries only. Every subfolder is one library (e.g. DotCore.Foundations). All code used by more than one app, or shared infrastructure, belongs here. Sub-app characteristic libs (子APP的特征类库) belong under dotapps/<App>/ (e.g. dotapps/d3check/D3CheckCore/), not in dotcore. No runnable apps under dotcore.
  • dotapps/ = runnable applications only. Every subfolder is one app (e.g. SimpleUi, Cli, CallModule, d3check). Apps reference dotcore and, when needed, a project under the same app (e.g. d3check → D3CheckCore); no app-to-app project references.
  • Tests live under dotcore/tests/ (e.g. DotCore.Foundations.Tests).

2. Naming and code language

  • Language: All code, comments, and user-facing strings in English. ASCII only in source code.
  • Libraries: Folder and project name DotCore.<Name> (e.g. DotCore.Utils). Namespace DotCore.*.
  • Apps: Folder and assembly name match (e.g. SimpleUi). Root namespace DotApps.<AppName> (e.g. DotApps.SimpleUi).

3. Dependencies

  • Direction: Apps → Libraries only. Libraries do not reference apps. Libraries may reference other libraries only in a DAG (no cycles).
  • DotCore.Foundations: No project refs; BCL/minimal NuGet only.
  • DotCore.Common: Foundations only.
  • DotCore.Utils / DotCore.Infrastructure: Foundations + Common (and optional third-party).
  • DotCore.UIInspect: Optional third-party (e.g. FlaUI) only; no dotcore project refs if not needed.
  • Apps: Reference only the DotCore.* projects they need (e.g. Cli uses Foundations, Common, Utils; SimpleUi uses UIInspect).

4. Project reference paths

  • From app (dotapps/<AppName>/): ..\..\dotcore\DotCore.<Name>\DotCore.<Name>.csproj
  • From library (dotcore/): ..\DotCore.<Name>\DotCore.<Name>.csproj
  • From test (dotcore/tests/...): ..\..\DotCore.<Name>\DotCore.<Name>.csproj

5. Adding a new library

  • Create dotcore/DotCore.<Name>/ with DotCore.<Name>.csproj.
  • Obey dependency rule: only reference DotCore.* projects that are allowed (see §3).
  • Add the project to dotcore/dotcore.sln.
  • Update DOT_ARCHITECTURE.md and dotcore/DESIGN.md project list.

6. Adding a new app

  • Create dotapps/<AppName>/ with <AppName>.csproj and entry point (e.g. Program.cs).
  • Set RootNamespace to DotApps.<AppName>, AssemblyName to <AppName>.
  • Add ProjectReference only to required dotcore libs (path ..\..\dotcore\DotCore.<Name>\DotCore.<Name>.csproj).
  • Add the project to dotcore/dotcore.sln.
  • Optionally use dotapps/start.ps1 menu "Create new app" to scaffold.

7. Build and run

  • From repo root: dotnet build dotcore/dotcore.sln
  • Run app: dotnet run --project dotapps/<AppName>/<AppName>.csproj (with optional args after --).
  • Menu: .\dotapps\start.ps1 (from repo root or from dotapps/) for "Create new app" or "Run existing app".

8. Updating this skill / rules

Summary

| Need | Where | |------|--------| | Shared types / utilities used by more than one app | dotcore/DotCore.* | | Sub-app characteristic library (single-app domain types) | dotapps/<AppName>/<SubLib>/ (e.g. dotapps/d3check/D3CheckCore/) | | Runnable app | dotapps/<AppName>/ | | Canonical layout and naming | DOT_ARCHITECTURE.md | | Cursor rule (globs dotcore/, dotapps/) | .cursor/rules/dot.mdc | | UI layer (Clean Architecture + MVVM + Fluent 2) | DOT_UI_PROJECT_SPECIFICATION.md, .cursor/rules/dot-ui.mdc | | Build | dotnet build dotcore/dotcore.sln | | Run app | dotnet run --project dotapps/... or start.ps1 |

Related skills