Velopack ile C# Masaüstü Uygulamalarını Hızla Dağıtma ve Güncelleme
Çapraz platform masaüstü uygulamaları dağıtmak ve güncellemek geleneksel olarak geliştirmenin en sinir bozucu kısımlarından biri olmuştur. Ancak Tim Corey, "Deploy and Update C# Desktop Apps Fast with Velopack" videosunda açıkladığı gibi, bu süreç artık son derece kolay olabilir.
Velopack ile — paket oluşturmadan güncelleme uygulamaya kadar her şeyi üstlenmek üzere tasarlanmış güçlü bir araç — geliştiriciler artık karmaşık derleme hatlarına veya sayısız yapılandırma dosyasına ihtiyaç duymadan yalnızca tek bir komutla uygulamalarını oluşturabilir, dağıtabilir ve yönetebilir.
Bu makalede Tim'in, standart bir C# WPF uygulamasını kendi kendini güncelleyen taşınabilir bir pakete dönüştürmek için Velopack kullanımıyla ilgili 32 dakikalık öğretici videosunu ayrıntılı bir şekilde inceleyeceğiz. Ayrıca, otomatik geçişleri, kod imzalamayı ve çoklu platformlar için sıfır yapılandırma kurulumunu nasıl desteklediğini de göreceğiz — hepsi yerel performansı korurken.
Giriş: Neden Velopack?
Tim, masaüstü uygulamalarını dağıtmanın ve güncellemenin zor olmak zorunda olmadığını, aksine "oldukça kolay" olabileceğini açıklayarak başlıyor. Bu videodaki amacı, bir WPF uygulamasını paketleyerek, bir yükleyici oluşturarak ve minimum yapılandırma ile otomatik güncellemeleri etkinleştirerek süreci basitleştirecek olan Velopack'i nasıl kullanabileceğimizi göstermek.
Bunun sadece WPF ile sınırlı olmadığını, aynı işlemin WinForms, konsol uygulamaları veya Java, Rust veya C++ gibi .NET olmayan yazılımlar için de çalıştığını vurguluyor. Velopack, neredeyse her dil veya çerçeve için paketler oluşturmaya destek verir, bu da onu bugün çapraz platform uygulamaları için mevcut en iyi yükleyici çerçevelerinden biri yapar.
WPF Projesinin Oluşturulması
Tim, Visual Studio 2022 içinde DeployDemo adında basit bir WPF projesi oluşturarak başlıyor. Proje .NET 9'u hedefliyor, ancak belirtiyor ki, .NET 10 gibi daha yeni sürümlerde de kusursuz çalışıyor.
Bu ilk yapı, tam dağıtım ve güncelleme sürecini sergilemek için sadece küçük bir uygulamadır. WPF kullanıyor olsa da, Velopack'in tüm türlerdeki .NET ve hatta .NET olmayan projeler için çapraz platform masaüstü uygulamaları için eşit derecede iyi çalıştığını tekrar ediyor.
Küresel Araç Olarak Velopack Kurulumu
Sonraki adımda Tim terminali açar ve şunu yazar:
dotnet tool install -g vpkBu tek komut, Velopack'i sistemde küresel olarak kurar, böylece geliştiriciler Velopack komutlarını herhangi bir yerden çalıştırabilir.
Tim bu adımı "gizli sos adımı" olarak adlandırıyor çünkü Velopack projenizden derleyici çıktısını alır ve onu kendi kendini güncelleyen taşınabilir bir pakete dönüştürür. Bu adım, uygulamanıza profesyonel bir yükleyici ve otomatik güncelleme çerçevesi sağlar — hepsi bir arada.
Komut satırının sadece kurulumu basitleştirmekle kalmayıp aynı zamanda CI/CD hatlarına kolayca entegre olduğunu ve böylece geliştiricilerin ek betikler olmadan paketlemeyi, sürümler oluşturarak dağıtımı otomatikleştirebileceğini açıklar. Sadece bir komutla otomatikleştirme yeteneği, geliştiricilere tutarlı yapılar sürdürürken değerli zaman kazandırır.
Velopack NuGet Paketini Kurma
Tim, Visual Studio içinde NuGet Paketlerini Yönet'i açar ve Velopack paketini kurar.
Velopack'in, daha önce popüler olan yükleyici çerçevesi Squirrel'ın yerine geçtiğini açıklar. Squirrel kullandıysanız, Velopack var olan kurulumunuzu otomatik olarak taşıyabilir — geliştirici güvenilirliğini, önemli ölçüde daha hızlı yapıları ve daha iyi çapraz platform uyumluluğu sunar.
Velopack, C#, Rust, C++ ve JavaScript gibi çeşitli programlama dilleri için destek sağlayan Windows, Linux ve macOS için masaüstü yükleyicileri üretebilir. Sistemlerde harika çalışan çapraz platform uygulaması dağıtımı için bir çerçevedir.
Tim, Velopack'in tamamen ücretsiz kullanımda olduğunu ve abonelik veya lisans ücreti talep etmeksizin ticari çözümlerle karşılaştırılabilir profesyonel yükleyici çerçeveleri sunduğunu vurgulamaktadır.
Kodda Velopack Başlatma
App.xaml.cs dosyasında Tim, bir yapıcı ekler ve sadece birkaç satırlık kodla Velopack'i başlatır:
new VelopackApp()
.Build()
.Run();new VelopackApp()
.Build()
.Run();Bu sıfır yapılandırma kurulumu, uygulamayı Velopack'in otomatik güncelleme çerçevesine hemen bağlar. Henüz güncellemeleri kontrol etmiyor olsa da, Velopack'in gelecekteki adımlarda kurulum ve güncellemeleri yönetmeye başladığında performansını sağlamak için gereklidir.
Tim, bu kurulumun basit olmasına rağmen uygulamayı kendi kendini güncelleyebilecek kadar güçlü olduğunu, kullanıcıların her zaman son sürümünü çalıştırmasını sağladığını açıklar.
Kullanıcı Arayüzü Tasarlama
Güncellemelere daha derinlemesine dalmadan önce Tim, basit bir WPF arayüzü oluşturur. Bir grid yerleşimi oluşturur ve üst sağ kısma bir Güncelleme butonu yerleştirir.
Başlangıçta, yanlış yerleştirilen bir unsur bir hataya neden olur, ancak Tim, izleyicilere WPF'de yerleşim hiyerarşisinin ne kadar önemli olduğunu hatırlatmak için kullanır. Düzeltildiğinde, yüklenebilir uygulamanın arayüzü temiz ve yeniden boyutlandırılabilir görünür — Velopack'in WPF gibi popüler çerçevelerle ne kadar iyi çalıştığını gösterir.
Sonra bir metin kutusu (mainTextBox) ve bir Gönder butonu (submitButton) içeren bir StackPanel ekler. Uygulama çalıştığında, minimum, çalışan bir kullanıcı arayüzü görüntüler. Bu küçük proje daha sonra otomatik olarak uygulanan güncellemeleri göstermek için kullanılacak.
Güncelleme Butonunu Uygulama
Şimdi Tim işlevselliğe geçiyor. Güncelleme butonuna çift tıklayarak tıklama olayını oluşturur. Bu, otomatik güncelleme çerçevesinin kalbi haline gelecek.
Süreci üç aşamaya ayırabileceğinizi açıklar — güncellemeleri kontrol etme, indirme ve uygulama — ancak bu demo için işleri kolaylaştırmak adına üçünü bir olayda birleştirir.
Güncelleme Mantığını Yazma
MainWindow.xaml.cs'de Tim, yeni bir UpdateManager oluşturur ve onu güncelleme kaynağı olarak görev yapacak yerel bir yol olarak gösterir:
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");Gerçek dünyada, bu yol, dışa dönük bir uygulama için bir HTTPS URL'si veya iç dağıtım için yerel bir dosya paylaşımı olabilir. Velopack ağır yapılandırma gerektirmez — her iki ortamda da sorunsuz çalışır.
Daha sonra, sürüm kontrolü ve güncellemeleri ele almak için asenkron kod ekler:
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);Bu kod, daha yeni bir sürümü kontrol eder, delta paketlerini indirir ve anında uygular. Velopack her şeyi halleder — güncelleme tamamlandığında uygulama otomatik olarak yeniden başlar.
Demo bir buton tıklaması kullanırken, geliştiricilerin bu güncellemeleri sessizce veya başlangıçta otomatik olarak tetikleyebileceğini, tıpkı profesyonel yazılımda olduğu gibi açıklıyor.
Uygulamayı Yayınlama
Sonraki adımda Tim, ilk sürümü nasıl yayınlayacağını gösterir. Proje klasörü içinde terminali kullanarak şunu çalıştırır:
dotnet publish --self-contained -r win-x64 -o ./publishBu, .NET çalışma zamanını içeren bağımsız bir yapı oluşturur. Bu, uygulamanın, .NET'in ayrı olarak yüklenmesini gerektirmeden herhangi bir son kullanıcının makinesinde çalışacağı anlamına gelir.
Tim, compile edilmiş çıktıyı — DeployDemo.exe dosyasını — yayın dizininde gösterir ve doğru çalıştığını doğrular. Bu noktada, sadece derleyici çıktısıdır — henüz paketlenmiş, yüklenebilir bir sürüm değil.
Yükleyici Paketi Oluşturma
Yayınlanan dosyaları dağıtılabilir bir yükleyiciye dönüştürmek için Tim, Velopack'in pack komutunu kullanır:
vpk pack --pack-id DeployDemo --pack-version 1.0.0 --pack-directory ./publishBu, kurulum dosyaları da dahil olmak üzere gerekli tüm dosyaları içeren bir Releases klasörü oluşturur.
Tim, sürüm dosyalarını yerel bir "sunucu" klasörüne kopyalar. Oluşturulan kurulum dosyasını çalıştırmak uygulamayı tamamen yükler — kısayollar oluşturur, Programlar ve Özellikler listesine bir giriş ekler ve ekstra izinler veya UAC istemleri olmadan yerel bir kurulum deneyimi sunar.
Artık uygulama, Velopack tarafından desteklenen resmi bir yüklenebilir uygulamadır.
Uygulamayı Güncelleme
Bir güncellemeyi simüle etmek için Tim Gönder butonunun kodunu değiştirir:
MessageBox.Show($"Hello {mainTextBox.Text}");MessageBox.Show($"Hello {mainTextBox.Text}");Ardından aynı yayın ve paketleme komutlarını tekrarlayarak ancak güncellenmiş versiyon numarası ile uygulamayı yeniden paketler:
vpk pack --pack-id DeployDemo --pack-version 1.0.1 --pack-directory ./publishVelopack otomatik olarak delta paketleri (mevcut kullanıcılar için küçük fark dosyaları) ve yeni kurulumlar için tam bir paket oluşturur. Tam paket yaklaşık 63 MB iken, delta paket sadece 132 KB'dir — Velopack'in diğer araçlar veya yükleyici çerçevelerinden önemli ölçüde daha hızlı ve daha verimli olduğunu kanıtlıyor.
Yeni sürümleri sunucu klasörüne kopyalayarak, etkili bir şekilde 1.0.1 sürümleri oluşturur.
Güncellemeyi Uygulama
Tim kurulu uygulamayı yeniden açar ve Güncelleme butonuna tıklar. Saniyeler içinde, Velopack 1.0.1 güncellemesini indirir ve uygular — uygulamayı otomatik olarak yeniden başlatır.
Adını yazıp Gönder'e bastığında artık "Merhaba Tim." diyor. Güncelleme çerçevesi, son derece hızlı çalıştı ve Velopack'ın kolayca entegre edildiğini ve tüm güncelleme döngüsünü kusursuz bir şekilde yönettiğini doğruladı.
Geliştiricilerin bu sürümleri Azure, dosya depolama veya bir web deposunda barındırabileceği ve aynı otomatik güncelleme mantığının Windows, Linux veya macOS'ta çalışmaya devam edeceğini belirtir.
Bakım ve Esnekliği Basitleştirme
Bu sürecin masaüstü uygulama bakımını son derece kolay hale getirdiğini vurgular. Geliştiriciler, minimum konfigürasyonla ve harici bağımlılıklar olmadan tam otomatik güncelleme işlevselliği sunarak dahili araçlar veya genel yazılımı dağıtabilir.
Velopack, .NET geliştiricileri için tanıdık bir API sunar ve her adımı yönetir:
Yayınların yapılandırılması
Paketlerin oluşturulması
Sürüm oluşturma
Güncellemelerin uygulanması
- Temiz bir şekilde kaldırma
Tüm bunlar, karmaşık bir yapı boru hattına veya derin yapılandırma dosyalarına gerek kalmadan gerçekleşir.
Tim, Velopack'i geliştiricilerin değerli zaman tasarrufu sağlarken cilalı, profesyonel yazılım sunmalarına yardımcı olan harika bir araç olarak tanımlar. Bu, "sadece çalışan" çapraz platform güncellemeleri için bir çerçevedir.
Kalite Takibi ve Sürüm Takibi
Tim, kurulu uygulamanın Windows'un "Program Kaldır veya Değiştir" listesinde yer aldığını ve 1.0.1 sürümünü gösterdiğini belirtir. Kaldırma işlemi sorunsuz — Velopack sadece klasörü siler, herhangi bir kalıntı bırakmaz.
Sadece WPF için değil, WinForms, UNO Platform ve hatta eski .NET Framework 4.6.2 projeleri için harika çalıştığını ekler. Ayrıca Rust veya JavaScript gibi diğer popüler çerçeveler ve dillerle uyumludur ve bu da onu çapraz platform yükleyiciler için evrensel bir çözüm haline getirir.
Sonuç
Son olarak, Tim, Velopack'in performansından ne kadar etkilendiğini ifade eder. Sadece birkaç adımla — aracı kurarak, bir satır kod ekleyerek ve iki komut çalıştırarak — geliştiriciler, sıradan bir .NET projesinden tam bir yüklenebilir, kendi kendini güncelleyen, çapraz platform bir uygulamaya geçebilir.
Velopack geliştiricilerine böylesine üstün bir mühendislik eseri oluşturdukları için teşekkür eder ve bunu bugün mevcut en iyi yükleyici ve güncelleme çerçevesi olarak nitelendirir.
Tim, izleyicilere tüm detayların, komutların ve kaynak kodunun video açıklamasında bulunabileceğini hatırlatarak bitiriyor. Geliştiricileri, fikirleri tartışmaya, özellik isteklerinde bulunmaya ve projenin geleceğine katkıda bulunmaya halkça açık bir depo aracılığıyla teşvik ediyor.

