ASP.NET Core 8 Projelerini IIS 10 ve Plesk Üzerinde Yayınlama Rehberi

ASP.NET Core 8'i Plesk Obsidian ve IIS 10'da adım adım yayınlayın. web.config, App Pool, 500.19/502.5/403.14 hata çözümleri dahil — 5 dakikada canlıya alın.

ASP.NET Core 8 Projelerini IIS 10 ve Plesk Üzerinde Yayınlama Rehberi

ASP.NET Core 8.0, Microsoft'un geliştirdiği yüksek performanslı, ölçeklenebilir web uygulama mimarisidir. Bu rehberde C# ASP.NET Core projenizi Windows Server altyapısında IIS 10 ve Plesk Obsidian paneli kullanarak adım adım canlıya almayı, web.config yapılandırmasını ve yaygın görülen 500.19, 502.5 ve 403.14 hata kodlarının çözümlerini detaylıca ele alacağız.

⚡ Ön Gereksinimler & Sunucu Hazırlığı

  • Geliştirme Ortamı: Visual Studio 2022 (v17.8+) veya .NET 8.0 SDK yüklü bilgisayar.
  • ASP.NET Core Hosting Bundle: Sunucuda (IIS 10 tarafında) AspNetCoreModuleV2 işleyicisinin yüklü olması gerekir. Skyversal Windows Hosting sunucularında .NET 8.0 Hosting Bundle önceden kurulu ve yapılandırılmıştır. Kendi sunucunuzu yönetiyorsanız Microsoft Resmi Hosting Bundle İndirme Sayfası üzerinden paketi indirip IIS'i iisreset komutuyla yeniden başlatmalısınız.
  • Plesk Panel Hesabı: Windows Plesk Hosting erişim bilgileri.

Adım 1 — Deployment Tipinin Seçilmesi (Publish)

ASP.NET Core projelerini sunucuya gönderirken iki farklı deployment seçeneğiniz bulunur:

  • Framework-Dependent (Önerilen): Sunucuda kurulu olan .NET 8 Runtime'ı kullanır. Dosya boyutu çok küçüktür (~15 MB).
  • Self-Contained: .NET çalışma zamanını kütüphanelerle birlikte paketler. Sunucuda .NET runtime sürüm bağımlılığını kaldırır.

Terminal üzerinden publish almak için aşağıdaki komutlardan birini çalıştırın:

# 1. Framework-Dependent Publish (Önerilen):
dotnet publish -c Release -o ./publish

# 2. Self-Contained Publish (x64 Bağımsız - Standalone .exe üretir):
dotnet publish -c Release -r win-x64 --self-contained true -o ./publish

Adım 2 — web.config Dosyasını Yapılandırın

.NET 6, 7 ve 8 şablonlarında üretilen web.config dosyalarında, IIS üzerindeki alt uygulamalara (child applications) ayar sızıntısını engellemek için <location path="." inheritInChildApplications="false"> sarmalayıcısı kullanılır.

⚠️ Seçtiğiniz Deployment Tipine Göre processPath Ayarı:

Framework-Dependent: processPath="dotnet" ve arguments=".\Siteniz.dll"
Self-Contained: processPath=".\Siteniz.exe" ve arguments=""

<!-- 1. Framework-Dependent web.config Örneği -->
<?xml version="1.0" encoding="utf-8"?>
<location path="." inheritInChildApplications="false">
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Siteniz.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  </system.webServer>
</location>

<!-- 2. Self-Contained web.config Örneği (.exe Çalıştırır) -->
<?xml version="1.0" encoding="utf-8"?>
<location path="." inheritInChildApplications="false">
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\Siteniz.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  </system.webServer>
</location>

Adım 3 — Plesk Panel İle Yükleme & Klasör İzinleri

  1. Plesk Obsidian paneline giriş yapın ve Files (Dosyalar) sekmesine tıklayın.
  2. httpdocs klasöründeki varsayılan index dosyalarını temizleyin.
  3. Yerel bilgisayarınızdaki publish klasörünün içeriğini zip haline getirip httpdocs içine yükleyin ve Extract (Çıkart) yapın.
  4. httpdocs altında logs adında yeni bir klasör oluşturun.
  5. Plesk klasör izinleri (Permissions) bölümünden logs klasörüne IIS_IUSRS veya Plesk uygulama kullanıcısı için Write (Yazma) izni verildiğini doğrulayın.
Plesk Obsidian File Manager httpdocs klasörüne zip yükleme ve izin ayarlama ekranı Şekil 1: Plesk Obsidian Dosya Yöneticisi üzerinden httpdocs klasörüne ASP.NET Core dosyalarının aktarılması

Adım 4 — App Pool (Uygulama Havuzu) Ayarları & Recycle

ASP.NET Core kendi dahili Kestrel web sunucusunu çalıştırdığı için IIS App Pool yöneticisinin C# kodlarını derlemesine gerek yoktur:

  • Plesk paneli > Dedicated IIS Application Pool Settings kısmına gidin.
  • .NET CLR Version: No Managed Code olarak ayarlayın.
  • Enable 32-Bit Applications: False olmalıdır (64-bit DLL çakışmalarını önlemek için).
  • Dosyaları güncelledikten sonra sunucu önbelleğini temizlemek için Recycle Pool (Yeniden Başlat) butonuna basın.

🛠️ Sorun Giderme (Troubleshooting & Hata Kodları)

🔴 HTTP Error 500.19 — Internal Server Error

Sebebi: web.config XML sözdizim hatası veya sunucuda AspNetCoreModuleV2 (Hosting Bundle) bileşeninin eksik olması.

Çözümü: Sunucuda .NET 8 Hosting Bundle yüklü olduğunu doğrulayın. Kendi yönettiğiniz sunucuysa iisreset çalıştırın ve web.config etiketlerinin eksiksiz kapandığını kontrol edin.

🟡 HTTP Error 502.5 — Process Failure / App Crash

Sebebi: Uygulamanın Program.cs başlangıç aşamasında çökmesi, eksik DLL veya Siteniz.dll yolunun web.config içinde yanlış yazılması.

Çözümü: Hatanın detayını görmek için web.config dosyasında stdoutLogEnabled="true" ayarını açın. httpdocs/logs/stdout_*.log dosyasındaki C# exception detayını ve Windows Event Viewer kayıtlarını inceleyin.

🔵 HTTP Error 403.14 — Directory Browsing Not Configured

Sebebi: IIS'in isteği AspNetCoreModuleV2 modülüne yönlendiremeyip statik dosya işleyicisine (StaticFileModule) düşürmesi; ana dizinde varsayılan index belgesi (default document) olmaması ve Dizin Gezinme (Directory Browsing) özelliğinin kapalı olması.

Çözümü: web.config dosyasının alt klasörde değil doğrudan httpdocs kök dizininde yer aldığından, App Pool ayarında No Managed Code seçildiğinden ve AspNetCoreModuleV2 modülünün web.config içinde doğru tanımlandığından emin olun.

Son güncelleme: 10 Ağustos 2026
Bu sayfayı GitHub'da düzenle