{"id":260,"date":"2026-09-26T07:54:42","date_gmt":"2026-09-26T14:54:42","guid":{"rendered":"https:\/\/hostandtech.com\/kb\/?p=260"},"modified":"2026-09-27T10:06:30","modified_gmt":"2026-09-27T17:06:30","slug":"deploy-aspnet-core-app-plesk-windows","status":"publish","type":"post","link":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/","title":{"rendered":"How to Deploy an ASP.NET Core App in Plesk on Windows"},"content":{"rendered":"<h2>Overview<\/h2>\n<p>To deploy an ASP.NET Core app in Plesk on Windows, publish it with <code class=\"\" data-line=\"\">dotnet publish<\/code>, upload the contents of the publish folder (including the generated <code class=\"\" data-line=\"\">web.config<\/code>) to the domain&#8217;s <code class=\"\" data-line=\"\">httpdocs<\/code> folder, and make sure the server has the ASP.NET Core runtime your app targets. Plesk runs the app in IIS through the ASP.NET Core Module, so there is no separate service to start. Most failed deployments come down to a missing runtime, a wrong <code class=\"\" data-line=\"\">web.config<\/code> or locked files during an update, and each has a clear fix below.<\/p>\n<p>This guide is for developers deploying to Plesk for Windows hosting, whether on shared Windows hosting or their own Windows <a href=\"https:\/\/hostandtech.com\/vps-ssd-servers\">VPS<\/a>. It covers uploading through File Manager and publishing straight from Visual Studio with Web Deploy, setting the environment, updating a live app without file-lock errors, and reading the startup log when the app won&#8217;t start. If you&#8217;re still choosing a platform, <a href=\"https:\/\/hostandtech.com\/kb\/vps\/linux-vps-vs-windows-vps-key-differences\/\">Linux VPS vs Windows VPS<\/a> compares the two.<\/p>\n<h2>Prerequisites<\/h2>\n<ul>\n<li>A domain in Plesk for Windows with hosting set up. If you&#8217;re new to the panel, see <a href=\"https:\/\/hostandtech.com\/kb\/plesk-windows\/how-to-access-plesk-on-windows-server\/\">how to access Plesk on Windows Server<\/a>.<\/li>\n<li>The .NET SDK on your own computer, matching your project&#8217;s target version (for example .NET 8 or .NET 10).<\/li>\n<li>Knowing which ASP.NET Core runtimes the server has. On shared hosting, ask support; on your own server, run <code class=\"\" data-line=\"\">dotnet --list-runtimes<\/code> there. The server needs the ASP.NET Core Hosting Bundle for your version, or you publish self-contained (Step 1).<\/li>\n<li>A database if your app uses one. For SQL Server, see <a href=\"https:\/\/hostandtech.com\/kb\/plesk-windows\/how-to-configure-mssql-database-in-plesk\/\">how to configure an MSSQL database in Plesk<\/a>.<\/li>\n<\/ul>\n<h2>Step-by-Step: Deploy an ASP.NET Core App in Plesk<\/h2>\n<h3>Step 1: Publish the app on your computer<\/h3>\n<p>From the project folder, create a Release build in a <code class=\"\" data-line=\"\">publish<\/code> folder:<\/p>\n<div class='ht-code-snippet'><button class='ht-code-snippet__copy' onclick='htCopyCode(\"code-block-1\")' type='button' aria-label='Copy code'><svg class='ht-copy-icon' viewBox='0 0 32 32' width='16' height='16' fill='currentColor'><path d='M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z'><\/path><path d='M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z'><\/path><\/svg><svg class='ht-check-icon' viewBox='0 0 32 32' width='16' height='16' fill='currentColor'><path d='M13,24l-9-9,1.414-1.414L13,21.171,26.586,7.586,28,9Z'><\/path><\/svg><\/button><span class='ht-code-snippet__feedback'>Copied to clipboard<\/span><\/p>\n<pre class='ht-code-snippet__code' id='code-block-1'><code class=\"\" data-line=\"\">dotnet publish -c Release -o .\/publish<\/code><\/pre>\n<\/div>\n<p>This is a framework-dependent build: small, and it uses the runtime installed on the server. If the server doesn&#8217;t have your exact runtime version, publish self-contained instead. The output is much larger, but it carries its own runtime:<\/p>\n<div class='ht-code-snippet'><button class='ht-code-snippet__copy' onclick='htCopyCode(\"code-block-2\")' type='button' aria-label='Copy code'><svg class='ht-copy-icon' viewBox='0 0 32 32' width='16' height='16' fill='currentColor'><path d='M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z'><\/path><path d='M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z'><\/path><\/svg><svg class='ht-check-icon' viewBox='0 0 32 32' width='16' height='16' fill='currentColor'><path d='M13,24l-9-9,1.414-1.414L13,21.171,26.586,7.586,28,9Z'><\/path><\/svg><\/button><span class='ht-code-snippet__feedback'>Copied to clipboard<\/span><\/p>\n<pre class='ht-code-snippet__code' id='code-block-2'><code class=\"\" data-line=\"\">dotnet publish -c Release -r win-x64 --self-contained true -o .\/publish<\/code><\/pre>\n<\/div>\n<p>Check that <code class=\"\" data-line=\"\">publish<\/code> contains your app&#8217;s <code class=\"\" data-line=\"\">.dll<\/code> and a <code class=\"\" data-line=\"\">web.config<\/code>. The SDK generates the <code class=\"\" data-line=\"\">web.config<\/code> for you; IIS needs it to hand requests to your app.<\/p>\n<h3>Step 2: Prepare the domain in Plesk<\/h3>\n<ol>\n<li>Go to <strong>Websites &amp; Domains<\/strong> &gt; your domain &gt; <strong>Hosting &amp; DNS<\/strong> &gt; <strong>Hosting<\/strong>.<\/li>\n<li>Untick <strong>Microsoft ASP.NET<\/strong> and save. That setting is for classic ASP.NET 4.x; ASP.NET Core doesn&#8217;t use it, and Plesk recommends turning it off to save server resources.<\/li>\n<li>If your plan offers a <strong>Dedicated IIS Application Pool<\/strong>, switch it on. ASP.NET Core apps running in-process can&#8217;t share an application pool with another ASP.NET Core app (error 500.35 below).<\/li>\n<\/ol>\n<h3>Step 3: Upload the published files<\/h3>\n<p><strong>Option A: File Manager.<\/strong> Zip the <em>contents<\/em> of the <code class=\"\" data-line=\"\">publish<\/code> folder (not the folder itself). In Plesk, open <strong>Files<\/strong>, go into <code class=\"\" data-line=\"\">httpdocs<\/code>, delete the default placeholder files, upload the zip, then select it and choose <strong>Extract Files<\/strong>. <code class=\"\" data-line=\"\">web.config<\/code> and your <code class=\"\" data-line=\"\">.dll<\/code> must sit directly in <code class=\"\" data-line=\"\">httpdocs<\/code>, not in a subfolder.<\/p>\n<p><strong>Option B: Web Deploy from Visual Studio.<\/strong> In Plesk, go to <strong>Websites &amp; Domains<\/strong> &gt; your domain &gt; <strong>Web Deploy Publishing Settings<\/strong> and click <strong>Download<\/strong>. In Visual Studio, right-click the project, choose <strong>Publish<\/strong>, add a new profile, choose <strong>Import Profile<\/strong> and select the downloaded file. Future deployments are then one click. If the option isn&#8217;t shown in Plesk, Web Deploy isn&#8217;t installed on that server; ask support or use Option A.<\/p>\n<p><strong>Option C: FTP.<\/strong> Upload the contents of <code class=\"\" data-line=\"\">publish<\/code> into <code class=\"\" data-line=\"\">httpdocs<\/code> with any FTP client, using the FTP account from Plesk.<\/p>\n<h3>Step 4: Set the environment and connection string<\/h3>\n<p>An app deployed to a server runs as <code class=\"\" data-line=\"\">Production<\/code> by default, so it reads <code class=\"\" data-line=\"\">appsettings.json<\/code> and <code class=\"\" data-line=\"\">appsettings.Production.json<\/code>. Put the production connection string in <code class=\"\" data-line=\"\">appsettings.Production.json<\/code>, or set values as environment variables in <code class=\"\" data-line=\"\">web.config<\/code>:<\/p>\n<div class='ht-code-snippet'><button class='ht-code-snippet__copy' onclick='htCopyCode(\"code-block-3\")' type='button' aria-label='Copy code'><svg class='ht-copy-icon' viewBox='0 0 32 32' width='16' height='16' fill='currentColor'><path d='M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z'><\/path><path d='M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z'><\/path><\/svg><svg class='ht-check-icon' viewBox='0 0 32 32' width='16' height='16' fill='currentColor'><path d='M13,24l-9-9,1.414-1.414L13,21.171,26.586,7.586,28,9Z'><\/path><\/svg><\/button><span class='ht-code-snippet__feedback'>Copied to clipboard<\/span><\/p>\n<pre class='ht-code-snippet__code' id='code-block-3'><code class=\"\" data-line=\"\">&lt;aspNetCore processPath=&quot;dotnet&quot; arguments=&quot;.\\MyApp.dll&quot; stdoutLogEnabled=&quot;false&quot; stdoutLogFile=&quot;.\\logs\\stdout&quot; hostingModel=&quot;inprocess&quot;&gt;\n  &lt;environmentVariables&gt;\n    &lt;environmentVariable name=&quot;ASPNETCORE_ENVIRONMENT&quot; value=&quot;Production&quot; \/&gt;\n  &lt;\/environmentVariables&gt;\n&lt;\/aspNetCore&gt;<\/code><\/pre>\n<\/div>\n<p>Keep the <code class=\"\" data-line=\"\">processPath<\/code> and <code class=\"\" data-line=\"\">arguments<\/code> the SDK generated; only add the <code class=\"\" data-line=\"\">environmentVariables<\/code> block. A self-contained build has <code class=\"\" data-line=\"\">processPath=&quot;.\\MyApp.exe&quot;<\/code> and no arguments.<\/p>\n<p><strong>Note:<\/strong> <code class=\"\" data-line=\"\">dotnet publish<\/code> overwrites <code class=\"\" data-line=\"\">web.config<\/code> on every build. If you edit it on the server, copy the change back into the project (add a <code class=\"\" data-line=\"\">web.config<\/code> to the project root) or it will be lost at the next deployment. For redirect and rewrite rules in that file, see <a href=\"https:\/\/hostandtech.com\/kb\/plesk-windows\/web-config-redirects-url-rewrite-plesk-windows\/\">web.config redirects and URL Rewrite in Plesk<\/a>.<\/p>\n<h3>Step 5: Update a live app without file-lock errors<\/h3>\n<p>While the app is running, IIS keeps its <code class=\"\" data-line=\"\">.dll<\/code> files locked, so overwriting them fails part-way through an upload. Take the app offline for the few seconds the upload takes:<\/p>\n<ol>\n<li>Upload a file named exactly <code class=\"\" data-line=\"\">app_offline.htm<\/code> to <code class=\"\" data-line=\"\">httpdocs<\/code>. It can contain a short &#8220;back in a minute&#8221; message. The ASP.NET Core Module shuts the app down and shows that page to visitors.<\/li>\n<li>Upload the new build.<\/li>\n<li>Delete <code class=\"\" data-line=\"\">app_offline.htm<\/code>. The next request starts the new version.<\/li>\n<\/ol>\n<p>If you publish with Web Deploy, it can do this for you: add <code class=\"\" data-line=\"\">&lt;EnableMSDeployAppOffline&gt;true&lt;\/EnableMSDeployAppOffline&gt;<\/code> inside the <code class=\"\" data-line=\"\">PropertyGroup<\/code> of your publish profile (the <code class=\"\" data-line=\"\">.pubxml<\/code> file under <code class=\"\" data-line=\"\">Properties\/PublishProfiles<\/code>).<\/p>\n<h2>Verify the deployment<\/h2>\n<p>Open the site in a browser. If you see your app, check a page that reads from the database too, since a bad connection string usually only shows up there. Then secure the site with an SSL certificate from <strong>SSL\/TLS Certificates<\/strong> on the domain and add HTTPS redirection if your app doesn&#8217;t already use <code class=\"\" data-line=\"\">app.UseHttpsRedirection()<\/code>. If you see an HTTP 500 error instead, the section below matches the error number to the fix.<\/p>\n<h2>Common Issues &amp; Troubleshooting<\/h2>\n<p>For any 500.3x error, turn on the startup log first. It records the exception that stopped the app:<\/p>\n<ol>\n<li>Create a folder named <code class=\"\" data-line=\"\">logs<\/code> in <code class=\"\" data-line=\"\">httpdocs<\/code>. The module won&#8217;t create it for you.<\/li>\n<li>In <code class=\"\" data-line=\"\">web.config<\/code>, set <code class=\"\" data-line=\"\">stdoutLogEnabled=&quot;true&quot;<\/code> (the <code class=\"\" data-line=\"\">stdoutLogFile=&quot;.\\logs\\stdout&quot;<\/code> value from Step 4 is correct).<\/li>\n<li>Load the site once, then open the newest <code class=\"\" data-line=\"\">stdout_*.log<\/code> file in <code class=\"\" data-line=\"\">logs<\/code> with Plesk&#8217;s File Manager.<\/li>\n<li>Set it back to <code class=\"\" data-line=\"\">false<\/code> when you&#8217;re done.<\/li>\n<\/ol>\n<p><strong>Warning:<\/strong> The stdout log has no size limit and creates a new file on every start. Left on, it can fill your disk quota.<\/p>\n<h3>HTTP Error 500.30 &#8211; ASP.NET Core app failed to start<\/h3>\n<p><strong>Cause:<\/strong> The runtime loaded, but your app threw an exception during startup. The usual reasons are a wrong connection string, a missing <code class=\"\" data-line=\"\">appsettings<\/code> value, or a file or folder the app can&#8217;t write to.<\/p>\n<p><strong>Fix:<\/strong> Turn on the stdout log as above and read the exception. For database errors, check the server name, database and credentials against Plesk&#8217;s <strong>Databases<\/strong> page. For permission errors, give the site write access to the folder in <strong>Files<\/strong> &gt; <strong>Change Permissions<\/strong>.<\/p>\n<h3>HTTP Error 500.31 &#8211; Failed to load ASP.NET Core runtime<\/h3>\n<p><strong>Cause:<\/strong> The server doesn&#8217;t have the ASP.NET Core runtime version your app targets, for example an app built for .NET 10 on a server with only .NET 8.<\/p>\n<p><strong>Fix:<\/strong> Retarget the app to a version the server has, publish it self-contained (Step 1), or ask for the matching Hosting Bundle to be installed. On your own server, install the Hosting Bundle and restart IIS with <code class=\"\" data-line=\"\">iisreset<\/code>; <a href=\"https:\/\/hostandtech.com\/kb\/windows-server\/how-to-install-configure-iis-windows-server\/\">how to install and configure IIS<\/a> covers the IIS side.<\/p>\n<h3>HTTP Error 500.19 &#8211; Internal Server Error<\/h3>\n<p><strong>Cause:<\/strong> IIS can&#8217;t read <code class=\"\" data-line=\"\">web.config<\/code>. Either the file has an XML error, or the ASP.NET Core Module isn&#8217;t installed, so IIS doesn&#8217;t recognise the <code class=\"\" data-line=\"\">aspNetCore<\/code> section.<\/p>\n<p><strong>Fix:<\/strong> Compare your <code class=\"\" data-line=\"\">web.config<\/code> with the one <code class=\"\" data-line=\"\">dotnet publish<\/code> generated and undo manual edits. If the file is untouched, the server is missing the Hosting Bundle; ask support to install the ASP.NET Core component.<\/p>\n<h3>HTTP Error 500.35 &#8211; ASP.NET Core does not support multiple apps in the same app pool<\/h3>\n<p><strong>Cause:<\/strong> Two in-process ASP.NET Core apps share one IIS application pool, typically a second app in a subfolder or on a subdomain under the same subscription.<\/p>\n<p><strong>Fix:<\/strong> Turn on the dedicated application pool (Step 2) and run each app on its own domain or subdomain with its own pool. If that isn&#8217;t possible, switch the second app to out-of-process hosting by setting <code class=\"\" data-line=\"\">hostingModel=&quot;outofprocess&quot;<\/code> in its <code class=\"\" data-line=\"\">web.config<\/code>.<\/p>\n<h3>The process cannot access the file because it is being used by another process<\/h3>\n<p><strong>Cause:<\/strong> You uploaded over a running app and IIS still holds its files open.<\/p>\n<p><strong>Fix:<\/strong> Upload <code class=\"\" data-line=\"\">app_offline.htm<\/code> first, as in Step 5, then retry the upload and remove the file afterwards.<\/p>\n<div class=\"ht-faq-section\">\n<h2>Frequently Asked Questions<\/h2>\n<div class=\"ht-faq-item\">\n<h3 class=\"ht-faq-question\">Does Plesk for Windows support ASP.NET Core?<\/h3>\n<div class=\"ht-faq-answer\">\n<p>Yes, when the server has the Microsoft ASP.NET Core component and the matching .NET Hosting Bundle installed. The app runs in IIS through the ASP.NET Core Module. Ask your host which .NET versions are available, or publish your app self-contained so it brings its own runtime.<\/p>\n<\/div>\n<\/div>\n<div class=\"ht-faq-item\">\n<h3 class=\"ht-faq-question\">Where do I upload my ASP.NET Core files in Plesk?<\/h3>\n<div class=\"ht-faq-answer\">\n<p>Upload the contents of your publish folder into the domain&#8217;s httpdocs folder, so web.config and your app&#8217;s .dll sit directly inside httpdocs. Uploading the publish folder itself as a subfolder is the most common reason the site shows a directory listing or a 403 error.<\/p>\n<\/div>\n<\/div>\n<div class=\"ht-faq-item\">\n<h3 class=\"ht-faq-question\">Should I publish framework-dependent or self-contained?<\/h3>\n<div class=\"ht-faq-answer\">\n<p>Use framework-dependent when the server has your exact runtime version, because the upload is small and security updates to the runtime apply automatically. Use self-contained when the server lacks your version, since it includes the runtime, at the cost of a much larger upload that you update yourself.<\/p>\n<\/div>\n<\/div>\n<div class=\"ht-faq-item\">\n<h3 class=\"ht-faq-question\">How do I see why my ASP.NET Core app won&#8217;t start?<\/h3>\n<div class=\"ht-faq-answer\">\n<p>Create a logs folder in httpdocs, set stdoutLogEnabled to true in web.config, load the site once and read the newest stdout log file in Plesk&#8217;s File Manager. It shows the exception that stopped the app. Turn logging off afterwards because the files are never cleaned up automatically.<\/p>\n<\/div>\n<\/div>\n<div class=\"ht-faq-item\">\n<h3 class=\"ht-faq-question\">Can I publish directly from Visual Studio to Plesk?<\/h3>\n<div class=\"ht-faq-answer\">\n<p>Yes, if Web Deploy is installed on the server. Download the publishing settings from Websites &amp; Domains &gt; your domain &gt; Web Deploy Publishing Settings in Plesk, then import that file as a publish profile in Visual Studio. Each later deployment is a single click.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Publish your ASP.NET Core app, upload it to Plesk for Windows with File Manager or Web Deploy, set the environment, update it without file-lock errors, and fix the 500.30, 500.31, 500.19 and 500.35 startup errors.<\/p>\n","protected":false},"author":1,"featured_media":262,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[66],"tags":[690,85,62,87,67],"class_list":["post-260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-windows","tag-asp-net-core","tag-iis","tag-plesk","tag-windows-hosting","tag-windows-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Deploy an ASP.NET Core App in Plesk (Windows)<\/title>\n<meta name=\"description\" content=\"Deploy an ASP.NET Core app in Plesk on Windows: publish, upload to httpdocs or use Web Deploy, update without file locks, and fix 500.30 and 500.31.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Deploy an ASP.NET Core App in Plesk (Windows)\" \/>\n<meta property=\"og:description\" content=\"Deploy an ASP.NET Core app in Plesk on Windows: publish, upload to httpdocs or use Web Deploy, update without file locks, and fix 500.30 and 500.31.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/\" \/>\n<meta property=\"og:site_name\" content=\"Host And Tech knowledge base\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/stshostandtech\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-26T14:54:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-27T17:06:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/09\/deploy-aspnet-core-app-plesk-windows.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@stshostandtech\" \/>\n<meta name=\"twitter:site\" content=\"@stshostandtech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#\\\/schema\\\/person\\\/b6fa79c48ddaba71af32e395c5b017ee\"},\"headline\":\"How to Deploy an ASP.NET Core App in Plesk on Windows\",\"datePublished\":\"2026-09-26T14:54:42+00:00\",\"dateModified\":\"2026-09-27T17:06:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/\"},\"wordCount\":1612,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/deploy-aspnet-core-app-plesk-windows.webp\",\"keywords\":[\"ASP.NET Core\",\"IIS\",\"plesk\",\"Windows hosting\",\"Windows Server\"],\"articleSection\":[\"Plesk on Windows\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/\",\"url\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/\",\"name\":\"How to Deploy an ASP.NET Core App in Plesk (Windows)\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/deploy-aspnet-core-app-plesk-windows.webp\",\"datePublished\":\"2026-09-26T14:54:42+00:00\",\"dateModified\":\"2026-09-27T17:06:30+00:00\",\"description\":\"Deploy an ASP.NET Core app in Plesk on Windows: publish, upload to httpdocs or use Web Deploy, update without file locks, and fix 500.30 and 500.31.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/deploy-aspnet-core-app-plesk-windows.webp\",\"contentUrl\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/deploy-aspnet-core-app-plesk-windows.webp\",\"width\":1200,\"height\":630,\"caption\":\"Deploy an ASP.NET Core app in Plesk on Windows: dotnet publish, upload to httpdocs, use app_offline.htm for updates\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/plesk-windows\\\/deploy-aspnet-core-app-plesk-windows\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Deploy an ASP.NET Core App in Plesk on Windows\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#website\",\"url\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/\",\"name\":\"Host And Tech knowledge base\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#organization\",\"name\":\"Host And Tech knowledge base\",\"url\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/logo-dark.png\",\"contentUrl\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/logo-dark.png\",\"width\":1134,\"height\":395,\"caption\":\"Host And Tech knowledge base\"},\"image\":{\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/stshostandtech\",\"https:\\\/\\\/x.com\\\/stshostandtech\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/#\\\/schema\\\/person\\\/b6fa79c48ddaba71af32e395c5b017ee\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/aa1edac8bbadb442e059a5b65ad45a3b2e3ce689202373b96e3e567517ae4b39?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/aa1edac8bbadb442e059a5b65ad45a3b2e3ce689202373b96e3e567517ae4b39?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/aa1edac8bbadb442e059a5b65ad45a3b2e3ce689202373b96e3e567517ae4b39?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\\\/\\\/hostandtech.com\\\/kb\"],\"url\":\"https:\\\/\\\/hostandtech.com\\\/kb\\\/author\\\/admin_fjj7qydm\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Deploy an ASP.NET Core App in Plesk (Windows)","description":"Deploy an ASP.NET Core app in Plesk on Windows: publish, upload to httpdocs or use Web Deploy, update without file locks, and fix 500.30 and 500.31.","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:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/","og_locale":"en_US","og_type":"article","og_title":"How to Deploy an ASP.NET Core App in Plesk (Windows)","og_description":"Deploy an ASP.NET Core app in Plesk on Windows: publish, upload to httpdocs or use Web Deploy, update without file locks, and fix 500.30 and 500.31.","og_url":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/","og_site_name":"Host And Tech knowledge base","article_publisher":"https:\/\/www.facebook.com\/stshostandtech","article_published_time":"2026-09-26T14:54:42+00:00","article_modified_time":"2026-09-27T17:06:30+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/09\/deploy-aspnet-core-app-plesk-windows.webp","type":"image\/webp"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@stshostandtech","twitter_site":"@stshostandtech","twitter_misc":{"Written by":"admin","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#article","isPartOf":{"@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/"},"author":{"name":"admin","@id":"https:\/\/hostandtech.com\/kb\/#\/schema\/person\/b6fa79c48ddaba71af32e395c5b017ee"},"headline":"How to Deploy an ASP.NET Core App in Plesk on Windows","datePublished":"2026-09-26T14:54:42+00:00","dateModified":"2026-09-27T17:06:30+00:00","mainEntityOfPage":{"@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/"},"wordCount":1612,"commentCount":0,"publisher":{"@id":"https:\/\/hostandtech.com\/kb\/#organization"},"image":{"@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#primaryimage"},"thumbnailUrl":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/09\/deploy-aspnet-core-app-plesk-windows.webp","keywords":["ASP.NET Core","IIS","plesk","Windows hosting","Windows Server"],"articleSection":["Plesk on Windows"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/","url":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/","name":"How to Deploy an ASP.NET Core App in Plesk (Windows)","isPartOf":{"@id":"https:\/\/hostandtech.com\/kb\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#primaryimage"},"image":{"@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#primaryimage"},"thumbnailUrl":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/09\/deploy-aspnet-core-app-plesk-windows.webp","datePublished":"2026-09-26T14:54:42+00:00","dateModified":"2026-09-27T17:06:30+00:00","description":"Deploy an ASP.NET Core app in Plesk on Windows: publish, upload to httpdocs or use Web Deploy, update without file locks, and fix 500.30 and 500.31.","breadcrumb":{"@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#primaryimage","url":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/09\/deploy-aspnet-core-app-plesk-windows.webp","contentUrl":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/09\/deploy-aspnet-core-app-plesk-windows.webp","width":1200,"height":630,"caption":"Deploy an ASP.NET Core app in Plesk on Windows: dotnet publish, upload to httpdocs, use app_offline.htm for updates"},{"@type":"BreadcrumbList","@id":"https:\/\/hostandtech.com\/kb\/plesk-windows\/deploy-aspnet-core-app-plesk-windows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/hostandtech.com\/kb\/"},{"@type":"ListItem","position":2,"name":"How to Deploy an ASP.NET Core App in Plesk on Windows"}]},{"@type":"WebSite","@id":"https:\/\/hostandtech.com\/kb\/#website","url":"https:\/\/hostandtech.com\/kb\/","name":"Host And Tech knowledge base","description":"","publisher":{"@id":"https:\/\/hostandtech.com\/kb\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hostandtech.com\/kb\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/hostandtech.com\/kb\/#organization","name":"Host And Tech knowledge base","url":"https:\/\/hostandtech.com\/kb\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hostandtech.com\/kb\/#\/schema\/logo\/image\/","url":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/05\/logo-dark.png","contentUrl":"https:\/\/hostandtech.com\/kb\/wp-content\/uploads\/2026\/05\/logo-dark.png","width":1134,"height":395,"caption":"Host And Tech knowledge base"},"image":{"@id":"https:\/\/hostandtech.com\/kb\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/stshostandtech","https:\/\/x.com\/stshostandtech"]},{"@type":"Person","@id":"https:\/\/hostandtech.com\/kb\/#\/schema\/person\/b6fa79c48ddaba71af32e395c5b017ee","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/aa1edac8bbadb442e059a5b65ad45a3b2e3ce689202373b96e3e567517ae4b39?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/aa1edac8bbadb442e059a5b65ad45a3b2e3ce689202373b96e3e567517ae4b39?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/aa1edac8bbadb442e059a5b65ad45a3b2e3ce689202373b96e3e567517ae4b39?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/hostandtech.com\/kb"],"url":"https:\/\/hostandtech.com\/kb\/author\/admin_fjj7qydm\/"}]}},"_links":{"self":[{"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/posts\/260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/comments?post=260"}],"version-history":[{"count":1,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/posts\/260\/revisions"}],"predecessor-version":[{"id":264,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/posts\/260\/revisions\/264"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/media\/262"}],"wp:attachment":[{"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/media?parent=260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/categories?post=260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hostandtech.com\/kb\/wp-json\/wp\/v2\/tags?post=260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}