Son gözden geçirme: Eylül 2026 · Windows Server 2022 ve IIS 10 resmi dokümanına göre
Hızlı çözüm
Net core projesini IIS’te yayınlama işlemi üç aşamada yapılır: projenizi dotnet publish ile derleyip yayına hazırlayın, çıktı dosyalarını sunucudaki IIS site klasörüne kopyalayın, IIS’te uygulama havuzunu No Managed Code olarak ayarlayıp siteyi başlatın.
dotnet publish -c Release ile derleyin.| Panel | IIS Yöneticisi (IIS Manager) |
|---|---|
| Sistem | Windows Server 2019 / 2022, IIS 10 (VDS/VPS) |
| Yetki | Administrator |
| Narhost ürünü | VDS Sunucu |
Başlamadan önce

IIS varsayılan olarak statik dosyaları ve klasik ASP.NET uygulamalarını doğrudan çalıştırır; ASP.NET Core ve .NET Core uygulamaları ise kendi içlerinde çalışan bir Kestrel sunucusuyla ayakta durur, IIS önlerinde yalnızca ters vekil (reverse proxy) görevi görür. IIS’in isteği doğru yönlendirebilmesi için sunucuya ASP.NET Core Hosting Bundle kurulmalı ve uygulama havuzu No Managed Code olarak ayarlanmalıdır; aksi halde IIS projeyi klasik .NET uygulaması sanıp hata verir.
VDS/VPS’te işletim sistemi, IIS ve .NET Core çalışma zamanı sizin sorumluluğunuzdadır; Narhost altyapıyı ve ağı sağlar, yayınlama işlemini sunucunuzda siz yaparsınız. ASP.NET ve .NET Core’un kavramsal olarak nasıl çalıştığını merak ediyorsanız blogdaki ASP.NET ve .NET Core Nasıl Çalışır yazısına bakabilirsiniz; bu kart doğrudan yayınlama (publish) adımlarını anlatır.
dotnet publish -c Release -o ./yayin
Beklenen sonuç: yayin klasöründe uygulamanın .dll dosyaları, web.config ve bağımlılıklar oluşur.
iisreset ile yeniden başlatın.
Beklenen sonuç: iisreset komutu hata vermeden tamamlanır.
yayin klasörünün içeriğini RDP panosu, dosya paylaşımı ya da ZIP ile sunucuda site için ayırdığınız klasöre taşıyın.
Beklenen sonuç: hedef klasörde .dll dosyaları ve web.config görünür.
Dikkat
Uygulama havuzunu No Managed Code yapmazsanız IIS isteği Kestrel’e iletemez ve site 500 hatası verir.
Beklenen sonuç: siteyi tarayıcıdan açtığınızda uygulamanın karşılama sayfası gelir; gelmezse web.config‘teki stdout log dosyasına bakın.
Microsoft’un resmi dokümanına göre Hosting Bundle, .NET çalışma zamanını, ASP.NET Core modülünü ve IIS ile ortak çalışabilmesi için gereken diğer bileşenleri tek pakette kurar; ayrı ayrı kurmaya gerek yoktur.
Microsoft’un yayınlama eğitimine göre uygulama havuzunun kimliğinin (identity) site klasörüne yazma ve okuma izni olduğundan da emin olunmalıdır; aksi halde log dosyaları oluşturulamaz.
Sonuç
Sunucuda tarayıcıyla http://localhost ya da sitenin bağlı olduğu alan adını açın; uygulamanızın karşılama sayfasının hatasız geldiğini görmeniz beklenen sonuçtur. Dışarıdan da test etmek için alan adının sunucunuzun IP’sine yönlendirildiğinden emin olun.
web.config‘teki stdout log’unu geçici olarak açıp hatanın tam metnini görün; genelde eksik bir bağımlılık ya da yanlış giriş noktasıdır.Narhost desteği
Talebe şunları ekleyin: sunucu adı ya da IP, aldığınız tam hata mesajı (varsa stdout log içeriği), .NET sürümünüz ve denediğiniz adımlar.
Sonraki adımlar
Sunucuya RDP ile bağlanıp komut isteminde dotnet --list-runtimes yazın; kurulu tüm ASP.NET Core ve .NET çalışma zamanları sürümleriyle listelenir.
.NET Core kendi çalışma zamanını taşır; IIS’in klasik .NET CLR’ı devreye sokmasına gerek yoktur, aksi halde IIS isteği yanlış işlemeye çalışıp hata verir.
Hayır; yalnızca dotnet publish çıktısını tekrar oluşturup aynı hedef klasöre kopyalamanız yeterlidir, site ve uygulama havuzu ayarları kalıcıdır.
Bu makale sorununuzu çözdü mü?
Geri bildiriminiz için teşekkürler.
Çözemediniz mi?
Teknik ekibimiz sunucu tarafındaki ayarları sizin için kontrol edebilir. Destek talebinizde alan adınızı ve aldığınız hata metnini paylaşmanız süreci hızlandırır.