If your view of .NET was formed in the .NET Framework era, it is probably overdue for an update. Modern .NET is cross-platform, open source and at home in containers, the cloud and AI-enabled applications.
Figure 1: From an on-premises monolith to modular, cloud-native services.
If you haven’t worked closely with .NET for several years, the picture in your head may still involve Windows Server, IIS, Visual Studio and a large enterprise application that takes a committee to deploy. That picture was not invented. It reflects an earlier period in the Microsoft ecosystem, and many organisations still run important systems built that way.
The problem is treating that snapshot as the whole story. The platform changed substantially through .NET Core and the unified releases that followed. In 2026, teams use .NET for Linux services, containers, small APIs, cloud workloads, command-line tools and AI-enabled applications, as well as the large business systems for which it has long been known.
Here are five assumptions that still surface in technology discussions, and what the modern .NET ecosystem actually looks like.
This is the misconception with the longest shadow. The original .NET Framework was tied to Windows, so it is understandable that many people still connect the .NET name with Windows Server. Modern .NET, however, is designed to run on Windows, Linux and macOS.
An ASP.NET Core application can be developed on a Mac, built in a Linux CI pipeline, packaged as a Docker image and deployed to Kubernetes or a cloud service. None of that requires the production workload to run on Windows. Teams can use the dotnet command-line tools, Visual Studio Code or JetBrains Rider, while Visual Studio on Windows remains a strong option for those who prefer it.
Cross-platform does not mean every existing .NET application is instantly portable. A system may depend on Windows-specific APIs, COM components, Windows authentication assumptions or desktop technologies such as WPF. Those dependencies need to be assessed. The important distinction is that the platform no longer makes Windows the only possible destination. Windows is a first-class option, not a compulsory default.
The names are similar enough to cause genuine confusion, but the difference matters. .NET Framework is the original, Windows-only product. It remains part of the supported Windows landscape, and applications built on it may continue to perform valuable work, but it is not the same product as modern .NET.
The newer line began as .NET Core. From .NET 5 onwards, Microsoft dropped the word 'Core' and used the simpler .NET name for the unified, cross-platform platform. As of 2026, .NET 10 is the current Long Term Support release, with support scheduled through 14 November 2028.
Figure 2: .NET Framework and modern .NET are related but distinct product lines.
This is more than a naming detail. Installing a newer runtime does not magically turn a .NET Framework application into a .NET 10 application. Modernisation may involve reviewing project formats, third-party packages, application models, hosting arrangements and automated tests. Some systems are straightforward to move; others depend heavily on older Windows-only technology and need a phased plan.
When assessing an application estate, the useful first question is not simply 'Do we use .NET?' It is 'Which .NET do we use, where, and what does each application depend on?' Judging a new .NET project by experience of .NET Framework can be like reviewing a current car based on a model from the same manufacturer fifteen years ago.
Older .NET web stacks were often associated with sizeable application servers, long deployment cycles and generous infrastructure. Modern .NET offers a much wider range of shapes. ASP.NET Core supports small, focused services and Minimal APIs, while applications can be deployed as framework-dependent packages, self-contained applications or containers.
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.MapGet("/status", () => new { status = "ok" });app.Run();
Code example: a complete HTTP status endpoint using an ASP.NET Core Minimal API.
The runtime and libraries have received continuous performance work across successive releases. That does not mean every application becomes fast by changing its target framework - architecture, database access, network calls and code quality still matter - but 'built with .NET' is no longer a useful shortcut for 'slow'.
Native AOT is a good example of how deployment options have changed. In a traditional .NET application, source code is compiled to Intermediate Language, and the runtime's just-in-time compiler produces machine code as the application runs. Native ahead-of-time compilation instead produces native machine code when the application is published.
Figure 3: Traditional JIT compilation compared with Native AOT publishing.
For suitable workloads, Native AOT can provide faster start-up, a smaller memory footprint and a self-contained deployment that does not require a separately installed .NET runtime. Those characteristics can be valuable for command-line tools, short-lived processes, focused APIs, containers and serverless workloads.
It is not an automatic upgrade switch. Native AOT relies on trimming and limits some dynamic behaviours, including certain forms of reflection, runtime code generation and dynamic assembly loading. Library compatibility and diagnostics also need consideration. It is best treated as an engineering choice for a suitable workload, not the default answer for every application.
.NET is still very good at traditional enterprise software. Mature tooling, strong language features, a large library ecosystem and predictable support releases are useful when a system needs to remain maintainable for years. That strength has not disappeared; the range of workloads around it has expanded.
Today, .NET is used for REST APIs, web applications, microservices, background workers, cloud-native systems, serverless functions and command-line applications. It also supports desktop and mobile development where those models fit the requirement. A team can use the same language and many of the same engineering practices across a surprisingly broad application landscape.
AI is now part of that landscape too. Microsoft.Extensions.AI provides common .NET abstractions for capabilities such as chat clients and embedding generation, making it easier to connect applications to Azure OpenAI, OpenAI and other model providers without scattering provider-specific code throughout the application.
That supports practical patterns such as semantic search, embeddings and retrieval-augmented generation (RAG), where a model is given relevant information from an organisation's own content before it responds. .NET developers can also build tool-using agents and structured agent workflows with Microsoft Agent Framework. These are evolving technologies, and production use still requires careful evaluation, security, observability and cost controls. But they show that .NET is developing alongside current application trends rather than watching them from the sidelines.
Microsoft remains the principal steward of .NET and provides a substantial part of its engineering, documentation and commercial support. That is not the same as requiring an all-Microsoft technology stack. Modern .NET is open source, with its runtime, libraries and compilers developed in public repositories alongside community contributions.
A .NET service can run on Linux in Docker or Kubernetes, on premises or in Azure, AWS, OCI and other hosting environments. Teams can choose from multiple editors, build systems and CI/CD platforms, and use provider libraries for a wide range of relational and non-relational databases. NuGet includes a large open-source package ecosystem, and ordinary HTTP, messaging and open standards make integration with non-Microsoft systems unremarkable.
Of course, it is possible to design a .NET application that is closely tied to Windows or a particular cloud service. Sometimes that is a sensible trade-off because the platform-specific feature delivers real value. The key point is that the lock-in comes from architectural choices, not from using C# or the .NET runtime. Choosing .NET does not automatically mean choosing Windows Server, IIS, SQL Server, Visual Studio and Azure as a single indivisible bundle.
These five misconceptions share the same cause: the .NET name has endured while the platform behind it has changed. Modern .NET still offers many of the qualities that made it popular for important business systems: strong tooling, a mature ecosystem, capable languages and Long Term Support options. But now combines them with cross-platform development, containers, cloud-native deployment, open-source tooling, high performance and modern AI capabilities.
For organisations with an existing .NET estate, the practical response is not to assume everything is obsolete or everything needs to be rewritten. It is to identify which applications use .NET Framework and which use modern .NET, understand their dependencies and support horizons, and decide where modernisation would create meaningful business or operational value.
That distinction is also important when selecting a stack for new development. At DSP, we help organisations assess existing applications and plan pragmatic modernisation work, with the technology chosen around the system's real requirements rather than an outdated reputation.
For more information, check out our .NET services, or contact us today, and one of our expert developers will be in touch.
