Which projects .NET is right for
.NET is Microsoft’s open-source development platform, and ASP.NET Core is its web and API side. With a strong type system, mature tooling and long support windows, it works well for systems that will grow over years and gather more business rules along the way. Today’s .NET runs on Linux, so you are not tied to Windows servers.
Where .NET fits well
- You need many roles, permissions by region or unit, and an audit log of who changed what
- Your company’s existing systems and team are already on .NET
- The business rules are complex and will keep growing, so splitting the code into layers matters
- Heavy reporting and bulk data imports are part of the system
Where we would suggest another route
- You are aiming for a small first release of a few screens; setting up ABP is heavy at that scale
- Instant messaging is at the centre of the product and the team works entirely in TypeScript (we suggest Node.js here)
- Most of the work is document processing or working with AI models (we suggest Python here)
Layered architecture with ABP Framework
ABP Framework is an open-source application framework built on ASP.NET Core and grounded in domain-driven design (DDD). Identity, role and permission management, audit logging, background jobs and settings come as ready modules, so we spend our time on the client’s business rules. The solution is split into projects, each with a single responsibility:
| Layer | Responsibility | In a client project |
|---|---|---|
| Domain | Entities, business rules, domain events | Record, visit and transaction entities; an event handler that sends a notification when a transaction is recorded |
| Application | Use cases and permission checks | Two separate application layers, for the mobile side and the admin panel |
| HttpApi.Host | API, authentication, API documentation | Two separate hosts, for the mobile API and the admin API |
| EntityFrameworkCore | Database access and migrations | PostgreSQL and PostGIS; heavy reports with Dapper |
| DbMigrator | Schema updates and seed data | Roles and initial users |
.NET in a client project
In a client project we built a registration and management platform for an organisation with field teams and partner locations. Records, field visits, transaction history and region-based permissions all live in one system. The back end is written with .NET and ABP, the admin panel with Vite and React, and the mobile app with Expo. The main decisions on the back end:
- There are two separate API hosts: one used by the mobile app, the other by the admin panel. Both share the same domain layer, while their application layers and permissions are separate.
- Locations and region boundaries are stored in PostgreSQL with PostGIS and wired into EF Core through NetTopologySuite. The map-based admin screens and filtering by region sit on top of it.
- Heavy queries such as lists, counts and transaction reports are written as plain SQL with Dapper; the rest of the data access goes through EF Core.
- Audit logs are written to a database separate from the main one.
- When a transaction is recorded, a domain event fires and an SMS notification goes to the person concerned; the business rule and the notification stay separate.
- QR codes are generated with QRCoder; Excel exports use EPPlus and CSV imports use CsvHelper.
- Bulk data imports have their own command-line tool: it first runs in a trial mode and produces a report, and writes data only when explicitly told to.
What we use alongside .NET
ABP Framework
Layered solution structure, plus identity, permission and audit-log modules. We built a client project’s back end on ABP.
Entity Framework Core
Object-relational mapping and schema management through migrations. We use it with PostgreSQL in the same project.
PostGIS and NetTopologySuite
For location, boundary and proximity queries. The admin screens with maps run on them.
Dapper
Next to EF Core, for writing performance-sensitive report and list queries in plain SQL.
OpenIddict
Token-based authentication for the mobile app and the admin panel. We use it together with ABP’s account module.
Serilog
Structured, asynchronous logging, for tracing errors in production.
How a .NET project runs
- 01
Free scoping call
30 minWe talk about who will use the system and in which roles, your existing infrastructure and the budget you have in mind.
- 02
Written scope and quote
We write down the entities, the roles and permissions, the integrations and which layer takes on what.
- 03
Weekly releases
Every week we deliver a working build; you try the new screens and endpoints with your own roles.
- 04
Testing and release
A senior QA tests the build before release; migrations and seed data are applied to production in a controlled way.
- 05
The 30 days after launch
30 daysWe fix the bugs that surface in this period free of charge; after that you can continue with monthly maintenance.
Timelines and budget ranges are published on our custom software development and pricing pages; this page relies on the same figures.
Questions about .NET
Do I have to pay a licence fee for ABP?
ABP has an open-source edition and a paid commercial edition. In our client project we used only the open-source packages; the commercial edition was not needed.
Does .NET need a Windows server?
No. Current .NET runs on Linux. In our client project each API host and the database update tool is packaged as its own Linux-based Docker image.
Do you build the admin panel and the mobile app too?
Yes. In the same project we built the admin panel with Vite and React and the mobile app with Expo; both connect to the .NET APIs.
What do I keep when the project ends?
A perpetual licence to use the software, and documentation. Transferring the source code to you is possible for an extra fee, stated separately in the quote.