{"id":722,"date":"2026-09-09T02:00:13","date_gmt":"2026-09-09T02:00:13","guid":{"rendered":"https:\/\/windows-vps.org\/blog\/?p=722"},"modified":"2026-09-16T22:06:23","modified_gmt":"2026-09-16T22:06:23","slug":"dotnet-framework-vs-core-windows-server-iis-2026","status":"publish","type":"post","link":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/","title":{"rendered":".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Every IIS deployment decision starts with one question that has a real answer, not a preference: does this application need .NET Framework, .NET (formerly Core), or both? This guide gives you the decision in a table, the exact installation steps for each runtime, and the compatibility traps that force an unwanted rewrite six months in.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Short Answer<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead><tr><th>Signal in your project<\/th><th>Runtime to choose<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Uses <code>System.Web<\/code>, Web Forms, ASP.NET MVC 5, WCF server-side, ASMX<\/td><td>.NET Framework 4.8 (Windows-only)<\/td><\/tr>\n<tr><td>ASP.NET Core, minimal APIs, Blazor Server, gRPC services<\/td><td>.NET 8 \/ .NET 9 (Hosting Bundle)<\/td><\/tr>\n<tr><td>NuGet packages that only target <code>net48<\/code><\/td><td>.NET Framework<\/td><\/tr>\n<tr><td>Third-party Windows-only COM\/ActiveX interop<\/td><td>.NET Framework (or <code>Microsoft.Windows.Compatibility<\/code> on Core, with testing)<\/td><\/tr>\n<tr><td>Needs Linux containers, side-by-side versioning, or cross-platform CI<\/td><td>.NET 8\/9<\/td><\/tr>\n<tr><td>Long-lived LOB app, no rewrite budget, stable<\/td><td>.NET Framework 4.8 \u2014 still serviced on Windows Server<\/td><\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">.NET Framework 4.8.1 ships in-box on Windows Server 2025 and receives security fixes as a Windows component. .NET 8\/9 is an out-of-band runtime you install and patch yourself. That single difference drives most of the operational burden \u2014 Framework inherits OS patching, Core needs its own update routine.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What &#8220;Both Installed Side by Side&#8221; Actually Means<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">They coexist cleanly. .NET Framework lives in <code>C:\\Windows\\Microsoft.NET\\Framework64<\/code> and registers under the IIS <em>.NET CLR Version<\/em> app-pool setting. .NET 8\/9 installs under <code>C:\\Program Files\\dotnet<\/code> and its IIS integration comes from the ASP.NET Core Module (ANCM) \u2014 configured per application, not per app pool. That means:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Framework app and a Core app can sit in different IIS applications on the same site.<\/li>\n<li>Do <strong>not<\/strong> set &#8220;No Managed Code&#8221; app pools incorrectly \u2014 Core apps require the pool set to <em>No Managed Code<\/em> because ANCM handles hosting; leaving it on v4.0 can cause handler conflicts.<\/li>\n<li>Process identities differ: Framework runs in <code>w3wp.exe<\/code> as the pool identity; Core spawns its own <code>dotnet.exe<\/code> child process under that same pool identity.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Install .NET Framework 4.8.1 Workloads<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On Server Core or a minimal VPS image, the Framework HTTP features are often not present. Enable them explicitly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Serve ASP.NET 4.x apps\nInstall-WindowsFeature Web-Server, Web-Asp-Net45, Web-Net-Ext45, Web-ISAPI-Ext, Web-ISAPI-Filter\n\n# Add WCF\/HTTP activation if the app uses WCF endpoints\nEnable-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45,WCF-Tcp-Activation45 -All\n\n# Confirm which Framework versions are registered with IIS\n& \"$env:SystemRoot\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_regiis.exe\" -lv<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>-i<\/code> with <code>aspnet_regiis<\/code> only in old-script muscle memory \u2014 on modern Windows Server the role service installation above registers ASP.NET correctly, and re-running the legacy tool has caused more problems than it fixes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install .NET 8\/9 for IIS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Hosting Bundle is the only correct install for IIS-hosted Core apps \u2014 the runtime alone lacks ANCM and produces HTTP 500.30 at startup.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Download and install the Hosting Bundle, then verify\ndotnet --list-runtimes\ndotnet --list-sdks\n\n# IIS must be restarted after ANCM is installed\nnet stop was \/y\nnet start w3svc\n\n# Confirm the module is loaded\n%windir%\\system32\\inetsrv\\appcmd.exe list config -section:system.webServer\/globalModules | findstr AspNetCoreModuleV2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you hit 500.19 or 500.30 after this, the diagnosis path is covered step by step in our <a href=\"https:\/\/windows-vps.org\/blog\/dotnet-hosting-bundle-iis-setup\/\">Hosting Bundle on IIS guide<\/a>. Deployment mechanics differ too: Framework apps publish to a folder with <code>msbuild<\/code> and copy, while Core apps publish with <code>dotnet publish<\/code> and often deploy via Web Deploy or a zip pipeline \u2014 the <a href=\"https:\/\/windows-vps.org\/blog\/iis-web-deploy-publish-aspnet-visual-studio\/\">Web Deploy walkthrough<\/a> covers the publish profile side.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance and Support Reality in 2026<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead><tr><th>Dimension<\/th><th>.NET Framework 4.8.1<\/th><th>.NET 8 \/ 9<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>OS support<\/td><td>Windows only<\/td><td>Windows, Linux, containers<\/td><\/tr>\n<tr><td>Patching<\/td><td>Via Windows Update<\/td><td>You install and patch the runtime<\/td><\/tr>\n<tr><td>Throughput (typical API benchmark)<\/td><td>Baseline<\/td><td>3\u20138\u00d7 higher requests\/sec<\/td><\/tr>\n<tr><td>Side-by-side versions<\/td><td>4.x only (one per machine)<\/td><td>Multiple majors side by side<\/td><\/tr>\n<tr><td>Startup \/ cold start<\/td><td>Faster cold start in w3wp<\/td><td>ReadyToRun\/AOT available<\/td><\/tr>\n<tr><td>Future feature development<\/td><td>Maintenance \/ security only<\/td><td>Active development<\/td><\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The performance gap is real but rarely a reason to rewrite by itself \u2014 a well-tuned Framework app on IIS still serves thousands of requests per second. The honest reasons to move are end of feature development, cross-platform CI, and 3\u20138\u00d7 throughput on high-volume APIs. The reasons to stay are `System.Web` dependencies, WCF server endpoints, and a rewrite budget of zero.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sizing the VPS for Each Runtime<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Framework + IIS, low traffic:<\/strong> 2 vCPU \/ 4 GB is workable; 2 vCPU \/ 8 GB is comfortable with SQL Express alongside.<\/li>\n<li><strong>.NET 8 API on IIS:<\/strong> budget an extra ~200\u2013400 MB per Core app process; 4 GB RAM gets tight with three apps.<\/li>\n<li><strong>Running both stacks:<\/strong> plan 8 GB minimum \u2014 you pay for both process trees.<\/li>\n<li><strong>High-volume APIs:<\/strong> Core scales better per core, so spend on vCPU rather than on RAM.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Because Core apps multiply processes, and Framework apps multiply app pools, RAM is the resource that runs out first on a small VPS. When you outgrow your plan, move to a host that resizes without re-provisioning: <a href=\"https:\/\/interserver.net\/r\/1067805?url=interserver.net\/vps\/windows-vps.html\" rel=\"noreferrer noopener sponsored\" target=\"_blank\">InterServer<\/a> offers price-locked Windows VPS plans with promo code <strong>TRYINTERSERVER<\/strong> for $0.01 in month one, so the resize you do in six months is not a renegotiation. Current Windows plan specifications are compared at <a href=\"https:\/\/windows-vps.org\/\">windows-vps.org<\/a>, and if you are still deciding between runtimes for a fresh project, the <a href=\"https:\/\/windows-vps.org\/blog\/windows-vps-vs-linux-vps-for-dotnet-development-which-to-choose\/\">Windows vs Linux for .NET development comparison<\/a> settles the hosting question.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migration Traps, In Order of Frequency<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>System.Web.HttpContext.Current<\/strong> has no direct equivalent. This is the single biggest blocker \u2014 untangle it first.<\/li>\n<li><strong>Web.config transforms vs appsettings.json<\/strong> \u2014 configuration model is different, not ported.<\/li>\n<li><strong>Session state.<\/strong> In-memory session is still available but discouraged for scale-out; plan for Redis or SQL-backed session.<\/li>\n<li><strong>Windows authentication in IIS.<\/strong> Works for both, but the ANCM forwarding of the Windows identity needs explicit setup and testing.<\/li>\n<li><strong>Binary serialization (<code>BinaryFormatter<\/code>).<\/strong> Removed in .NET 9 \u2014 if you persist serialized objects, that is a data migration.<\/li>\n<li><strong>Third-party libraries<\/strong> that never published a <code>netstandard2.0<\/code> or <code>net8.0<\/code> target.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Run the migration in parallel: host the Core version on a second IIS application on the same VPS, cut a percentage of traffic to it, compare error rates and latency, then flip. A Windows VPS with a spare app pool and a few GB of headroom makes that rollout cheap. For anything still greenfield in 2026, start on .NET 8\/9 \u2014 the Framework choice is now a maintenance decision, not a development one.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Every IIS deployment decision starts with one question that has a real answer, not a preference: does this application need .NET Framework, .NET (formerly Core), or both? This guide gives you the decision in a table, the exact installation steps for each runtime, and the compatibility traps that force an unwanted rewrite six months in. &#8230; <a title=\".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026\" class=\"read-more\" href=\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/\" aria-label=\"Read more about .NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":2,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-722","post","type-post","status-publish","format-standard","hentry","category-reviews"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>.NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026 - Windows VPS Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026\" \/>\n<meta property=\"og:description\" content=\".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026\" \/>\n<meta property=\"og:url\" content=\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/\" \/>\n<meta property=\"og:site_name\" content=\"Windows VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-09T02:00:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T22:06:23+00:00\" \/>\n<meta name=\"author\" content=\"windows-vps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"windows-vps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/\",\"url\":\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/\",\"name\":\".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026 - Windows VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\"},\"datePublished\":\"2026-09-09T02:00:13+00:00\",\"dateModified\":\"2026-09-16T22:06:23+00:00\",\"author\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\"},\"breadcrumb\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/windows-vps.org\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\",\"url\":\"https:\/\/windows-vps.org\/blog\/\",\"name\":\"Windows VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/windows-vps.org\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\",\"name\":\"windows-vps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"caption\":\"windows-vps\"},\"sameAs\":[\"https:\/\/windows-vps.org\/blog\"],\"url\":\"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026 - Windows VPS Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/","og_locale":"en_US","og_type":"article","og_title":".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026","og_description":".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026","og_url":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/","og_site_name":"Windows VPS Blog","article_published_time":"2026-09-09T02:00:13+00:00","article_modified_time":"2026-09-16T22:06:23+00:00","author":"windows-vps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"windows-vps","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/","url":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/","name":".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026 - Windows VPS Blog","isPartOf":{"@id":"https:\/\/windows-vps.org\/blog\/#website"},"datePublished":"2026-09-09T02:00:13+00:00","dateModified":"2026-09-16T22:06:23+00:00","author":{"@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58"},"breadcrumb":{"@id":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/windows-vps.org\/blog\/dotnet-framework-vs-core-windows-server-iis-2026\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/windows-vps.org\/blog\/"},{"@type":"ListItem","position":2,"name":".NET Framework vs .NET on Windows Server IIS: Which Runtime to Choose in 2026"}]},{"@type":"WebSite","@id":"https:\/\/windows-vps.org\/blog\/#website","url":"https:\/\/windows-vps.org\/blog\/","name":"Windows VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/windows-vps.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58","name":"windows-vps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","caption":"windows-vps"},"sameAs":["https:\/\/windows-vps.org\/blog"],"url":"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/"}]}},"_links":{"self":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/comments?post=722"}],"version-history":[{"count":2,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/722\/revisions"}],"predecessor-version":[{"id":761,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/722\/revisions\/761"}],"wp:attachment":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/media?parent=722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/categories?post=722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/tags?post=722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}