İçeriğe atla

.NET uygulaması için Windows yükleyici oluşturma (WPF, WinForms, konsol)

Bir .NET masaüstü uygulamasını dotnet publish ile yayımlayın, framework'e bağımlı ile kendi içinde yeterli arasında seçim yapın ve publish klasörünü kısayollar ve kaldırıcı içeren bir Setup.exe'ye dönüştürün.

31 Ekim 2026 tarihinde güncellendi · 3 dk okuma

Visual Studio WPF veya WinForms uygulamanızı derler, dotnet publish ise size her yerde çalışan bir klasör verir. Eksik olan parça yükleyicidir: Başlat Menüsü girdisi, Program Files klasörü, Windows Ayarları'ndaki kaldırma girdisi. Eski ClickOnce ve Visual Studio Installer Projects hâlâ var, ama ikisi de yaşını belli ediyor. İşte bir .NET projesinden Setup.exe'ye giden en kestirme yol.

Adım 1: uygulamayı yayımlayın

Yayımlama, uygulamanın ihtiyaç duyduğu her şeyi içeren bir klasör üretir. Komutu proje klasöründen çalıştırın:

dotnet publish -c Release -r win-x64 --self-contained true

Çıktı bin\Release\net8.0-windows\win-x64\publish\ altına düşer (yoldaki hedef framework projenize göre değişir). Dağıtacağınız şey bu klasördür.

Önemli olan tek karar:

  • Kendi içinde yeterli (--self-contained true) .NET çalışma zamanını pakete dahil eder. Klasör 70 ila 150 MB arasındadır, ama önceden hiçbir şey kurmadan her Windows makinesinde çalışır. Herkese dağıttığınız yazılımlar için bunu seçin.
  • Framework'e bağımlı (--self-contained false) birkaç MB'dir, ancak kullanıcının eşleşen .NET Desktop Runtime'ı kurulu olmalıdır; aksi hâlde uygulama ilk açılışta bir indirme uyarısı gösterir. Yönetilen makinelerdeki dahili araçlar için uygundur.

Faydalı seçenekler:

  • -p:PublishReadyToRun=true daha hızlı başlangıç için uygulamayı önceden derler.
  • -p:PublishSingleFile=true çıktıyı tek bir .exe içinde toplar. Çalışır, ama bir yükleyici varken bunu kullanmanın gerekçesi kalmaz; ayrıca tek dosyalı uygulamalar yerel kütüphaneleri ilk çalıştırmada açar. Düz klasör daha basittir.
  • Kırpma (PublishTrimmed) WPF ve WinForms için desteklenmez; kapalı bırakın.

Yayımlanan .exe'nin simgeyi taşıması için uygulama simgesini proje dosyasında ayarlayın:

<PropertyGroup>
  <ApplicationIcon>app.ico</ApplicationIcon>
</PropertyGroup>

Hiçbir şeyin eksik olmadığından emin olmak için yayımlanan .exe'yi publish klasöründen bir kez çalıştırın; ideal olarak Visual Studio kurulu olmayan bir makinede.

Adım 2: publish klasörünü zip'leyin

publish` klasörünün _içeriğini_ zip'leyin: .exe, DLL'ler, .deps.json, .runtimeconfig.json ve varsa içerik dosyaları. Müşterilerin makinelerinde çökme sembolleri istemiyorsanız .pdb` dosyalarını dışarıda bırakın.

Adım 3: yükleyiciyi oluşturun

  1. Zip'i ExeTup'a yükleyin. Uygulamanızın .exe dosyasını ana program olarak seçer; bunu doğrulayın, çünkü kendi içinde yeterli bir yayım createdump.exe dosyasını da içerir ve ana program o değildir.
  2. Adı, sürümü (projedeki <Version> ile uyumlu tutun), yayımcıyı ve lisansı doldurun.
  3. Program Files'a kurulan klasik bir masaüstü uygulaması için tüm kullanıcılar'ı, müşterilerin yönetici hakları olmayabileceği durumlarda geçerli kullanıcı'yı seçin.
  4. win-x64 yayımı için 64 bit'i koruyun; win-x86 için 32 bit'i seçin.
  5. Aynı app.ico dosyasını yükleyin, kısayolları etkinleştirin ve oluşturun.

Setup.exe'yi indirin ve Windows'ta kurulumu ile kaldırmayı test edin.

.NET'e özgü notlar

  • Güncellemeler. Daha yüksek sürümlü yeni bir yükleyici dağıtın. Eski sürümün üzerine kurmak dosyaları değiştirir; yükleyici bir otomatik güncelleme kanalı içermez.
  • Ayarlar ve veriler. Kullanıcı verilerini .exe'nin yanına değil, %APPDATA% veya %LOCALAPPDATA% altına yazın. Program Files normal kullanıcılar için salt okunurdur ve kaldırıcı yalnızca kendi kurduğu dosyaları siler.
  • Ön koşullar. Kendi içinde yeterli yayımlar başka hiçbir şeye ihtiyaç duymaz. Uygulamanız Visual C++ çalışma zamanına veya bir veritabanı sürücüsüne ihtiyaç duyuyorsa bunu belgeleyin; yükleyici başka yükleyicileri zincirleme çalıştırmaz.
  • Kod imzalama. Zip'lemeden önce yayımlanan .exe'yi, ardından indirdiğiniz Setup.exe'yi imzalayın. Bkz. SmartScreen rehberi.

Alternatifler

  • Visual Studio Installer Projects Visual Studio içinden MSI dosyaları üretir. Hâlâ bir uzantı olarak mevcut; sınırlı ve kendi içinde yeterli yayımlarla kullanımı zahmetli.
  • ClickOnce otomatik güncellemeli, kullanıcı başına kurulum sunar; sizin işlettiğiniz bir web sunucusuna bağlıdır.
  • WiX Toolset XML'den MSI dosyaları oluşturur ve kurumsal düzeyde MSI paketlemenin standardıdır. Güçlüdür, öğrenme eğrisi de ona göredir.
  • MSIX Microsoft'un daha yeni paket biçimidir; Microsoft Store'u hedeflediğinizde en iyi seçenektir.

Biçimin ne zaman önemli olduğunu görmek için MSI ve EXE yükleyiciler yazısına bakın.

Sık sorulan sorular

Framework'e bağımlı mı, kendi içinde yeterli mi yayımlamalıyım?

Herkese verdiğiniz her şey için kendi içinde yeterli; böylece uygulama çalışma zamanı indirmeden çalışır. .NET çalışma zamanını BT'nin yönettiği makinelerdeki dahili araçlar için framework'e bağımlı.

Yükleyici .NET çalışma zamanını içeriyor mu?

Kendi içinde yeterli olarak yayımlarsanız evet, çünkü publish klasörünün bir parçasıdır. Yükleyici zip'in içinde ne varsa onu dağıtır.

Grup İlkesi için MSI üretebilir miyim?

ExeTup bir Setup.exe oluşturur. /S ile sessiz kurulum yapar; bu da betikli dağıtımların çoğunu karşılar. Yalnızca MSI kabul eden ilkeler için doğru araç WiX'tir.

Bu hangi .NET sürümleriyle çalışır?

Publish klasörü üreten her sürümle: .NET 6, 7, 8, 9 ve sonrası, ayrıca Visual Studio ile derlenen .NET Framework uygulamaları (bin\Release çıktısını kullanın).

İlgili rehberler