Velopack ile C# Masaüstü Uygulamalarını Hızla Dağıtma ve Güncelleme
[[academy-video-youtube({"vid": "DcKglltuznc", "start_time": "0", "title": "C# Masa Uygulamaları Nasıl Hızlıca Dağıtılır ve Güncellenir - Velopack Kullanarak", "creator": "Tim Corey", "length": "32m 25s"})]]
Çapraz platform masaüstü uygulamalarının dağıtımı ve güncellenmesi, geleneksel olarak geliştirme sürecinin en can sıkıcı kısımlarından biri olmuştur. Ama Tim Corey, "C# Masaüstü Uygulamaları Nasıl Hızlıca Dağıtılır ve Güncellenir - Velopack Kullanarak" adlı videosunda, bu sürecin artık son derece kolay olabileceğini açıklıyor.
Paket oluşturma ve güncellemeleri uygulamaya yönelik harika bir araç olan Velopack ile geliştiriciler artık karmaşık yapı hatları veya sonsuz yapılandırma dosyaları olmadan sadece tek bir komutla uygulamalarını oluşturabilir, dağıtabilir ve bakımlarını yapabilir.
Bu makalede, Tim'in 32 dakikalık öğreticisinin tamamının detaylı bir izlenebilirlik turunu sunacağız; standart bir C# WPF uygulamasını self-updating taşınabilir bir pakete dönüştürmek için Velopack kullanmayı kapsayacağız. Ayrıca, birden çok platform için otomatik geçişleri, kod imzalamayı ve sıfır yapılandırma kurulumunu nasıl desteklediğini - yerel performansı korurken göreceğiz.
Giriş: Neden Velopack?
Tim, masaüstü uygulamalarını dağıtmanın ve güncellemenin zor olması gerekmediğini açarak, aksine "oldukça kolay" olabileceğini açıklar. Bu videodaki amacı, bir WPF uygulamasını paketleyerek, bir yükleyici oluşturarak ve minimal konfigürasyonla otomatik güncellemeleri etkinleştirerek Velopack'in süreci nasıl kolaylaştıracağını göstermektir.
Bu yalnızca WPF ile sınırlı olmadığını, aynı sürecin WinForms, konsol uygulamaları veya hatta Java, Rust veya C++ gibi non-.NET yazılımlar için de çalıştığını vurgular. Velopack, neredeyse her dil veya çerçeve için paket oluşturmayı destekler ve bu da onu bugün çapraz platform uygulamaları için mevcut en iyi yükleyici çerçevelerinden biri yapar.
WPF Projesini Oluşturmak
Tim, Visual Studio 2022 içinde başlar ve DeployDemo adlı basit bir WPF projesi oluşturur. Proje .NET 9 hedef alıyor, ancak belirttiği gibi, daha yeni sürümlerde (örneğin .NET 10) mükemmel şekilde çalışıyor.
Bu ilk yapı, tam dağıtım ve güncelleme sürecini göstermek için sadece küçük bir uygulamadır. WPF kullanmasına rağmen, Velopack'in çapraz platform masaüstü uygulamaları için de eşit derecede iyi çalıştığını, bu nedenle .NET ve hatta .NET dışı projelerin tüm türleri için tek bir çözüm yaklaşımı oluşturduğunu tekrar eder.
Velopack'ı Küresel Araç Olarak Yüklemek
Ardından, Tim terminali açar ve şunu yazar:
dotnet tool install -g vpkBu tek komut, Velopack'i sistemde küresel olarak yükler ve geliştiricilerin Velopack komutlarını her yerden çalıştırmasına olanak tanır.
Tim buna "gizli sos adımı" diyor çünkü Velopack, projenizden derleyici çıktısını alır ve 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 kazandırır - hepsi bir arada.
Kurulumun sadece komut satırını basitleştirmediğini, aynı zamanda kolayca CI/CD hatlarına da entegre olduğunu açıklar, böylece geliştiriciler ilave betikler olmadan paket yapmayı, sürümler oluşturmayı ve dağıtımı otomatikleştirebilir. Sadece bir komutla otomatikleştirme yeteneği geliştiricilerin değerli zamanlarından tasarruf etmelerini ve tutarlı yapılar sağlamalarını sağlar.
Velopack NuGet Paketini Yüklemek
Visual Studio içinde, Tim NuGet Paketlerini Yönet'i açar ve Velopack paketini yükler.
Velopack'in, daha önce popüler bir yükleyici çerçevesi olan Squirrel'a halef olduğunu açıklar. Squirrel kullanmışsanız, Velopack mevcut ayarınızı otomatik olarak taşıyabilir — artan güvenilirlik, önemli ölçüde daha hızlı derlemeler ve daha iyi çapraz platform uyumluluğu sunar.
Velopack, çeşitli programlama dillerini, (C#, Rust, C++ ve JavaScript gibi) destekleyerek Windows, Linux ve macOS için masaüstü yükleyicilerini üretebilir. Bu, sistemlerde harika çalışan çapraz platform uygulama dağıtımı için bir çerçevedir.
Tim, Velopack'in tamamen ücretsiz olduğunu vurgular — abonelik veya lisans ücreti yoktur, ancak ticari çözümlerle karşılaştırılabilir profesyonel yükleyici çerçeveleri sunar.
Velopack'ı Kod İçinde Başlatma
App.xaml.cs dosyasında, Tim bir yapıcı ekleyip birkaç kod satırıyla 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 anında bağlar. Bu henüz güncellemeleri kontrol etmiyor, ancak ilerleyen adımlarda Velopack'in performansını, güncellemeleri ve kurulumları yönetmeye başladığında sağlayan şeydir.
Tim, bu kurulumun basit olmasına rağmen, uygulamayı kendini günceller hale getirecek kadar güçlü olduğunu, kullanıcıların her zaman kendi nihai kullanıcı makinelerinde en son sürümü çalıştırmalarını sağladığını açıklar.
Kullanıcı Arayüzünü Tasarlama
Güncellemelere derinlemesine dalmadan önce, Tim bir temel WPF arayüzü oluşturur. Bir ızgara düzeni oluşturur ve Üstte, sağda bir Güncelleme düğmesi yerleştirir.
Başlangıçta, yanlış yerleştirilmiş bir eleman bir hataya neden olur, ancak Tim izleyicilere WPF'de düzen hiyerarşisinin ne kadar önemli olduğunu hatırlatmak için bunu kullanır. Bir kez düzeltildiğinde, yüklenebilir uygulamanın arayüzü temiz ve yeniden boyutlandırılabilir — Velopack'in, WPF gibi popüler çerçevelerle nasıl mükemmel çalıştığını gösterir.
Daha sonra bir metin kutusu (mainTextBox) ve bir Gönder düğmesi (submitButton) içeren bir StackPanel ekler. Uygulama çalıştırıldığında, minimal, çalışan bir UI görüntüler. Bu küçük proje, daha sonra otomatik olarak uygulanan güncellemelerin gösterilmesi için kullanılacaktır.
Güncelleme Düğmesini Uygulama
Şimdi Tim işlevselliğe geçiyor. Güncelleme butonuna çift tıklayarak tıklama olayını oluşturuyor. Bu, otomatik güncelleme çerçevesinin kalbi olacak.
Süreci üç aşamaya — kontrol etme, indirme ve güncelleme uygulama — ayırabileceğinizi ama bu demoda hepsini tek bir olayda birleştirerek basit hale getirdiğini açıklıyor.
Güncelleme Mantığını Yazma
MainWindow.xaml.cs'de, Tim yeni bir UpdateManager oluşturur ve onu güncelleme kaynağı olarak hareket edecek bir yerel yola yönlendirir:
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");Gerçek dünyada, bu yol bir dış uygulama için bir HTTPS URL veya iç dağıtım için yerel bir dosya paylaşımı olabilir. Velopack ağır bir yapılandırma gerektirmez — her iki ortamda da sorunsuz çalışır.
Daha sonra, Tim sürüm kontrolü ve güncellemeleri yönetmek için async 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 olup olmadığını kontrol eder, delta paketlerini indirir ve hemen uygular. Velopack her şeyi halleder — güncelleme tamamlandığında uygulama otomatik olarak yeniden başlatılır.
Bu demonun bir buton tıklaması kullandığını, ancak geliştiricilerin bu güncellemeleri sessizce veya profesyonel yazılım gibi başlangıçta otomatik olarak tetikleyebileceklerini açıklar.
Uygulamayı Yayınlama
Sonraki olarak Tim, ilk sürümü nasıl yayınlayacaklarını gösteriyor. Proje klasöründeki terminali kullanarak şunu çalıştırıyor:
dotnet publish --self-contained -r win-x64 -o ./publishBu, .NET çalıştırma zamanını içeren bağımsız bir derleme oluşturur. Bu, uygulamanın herhangi bir son kullanıcının bilgisayarında, bağımsız olarak .NET'in yüklenmesini gerektirmeden çalışacağı anlamına gelir.
Tim yayın klasöründe derlenmiş çıktıyı — DeployDemo.exe dosyasını — göstererek, doğru çalıştığını doğruluyor. Bu noktada, henüz bir paketlenmiş, yüklenebilir sürüm değil — sadece derleyici çıktısı.
Yükleyici Paketi Oluşturma
Yayınlanan dosyaları dağıtılabilir bir yükleyiciye dönüştürmek için, Tim Velopack'in paket komutunu kullanır:
vpk pack --pack-id DeployDemo --pack-version 1.0.0 --pack-directory ./publishBu, tüm gerekli dosyaları içeren, kurulum yürütülebilir dosyalarının da bulunduğu bir Releases klasörü oluşturur.
Tim yayını kopyaları yerel bir "sunucu" klasörüne taşır. 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 istekleri gerektirmeden yerel bir kurulum deneyimi sunar.
Şimdi, uygulama, Velopack tarafından desteklenen resmi bir yüklenebilir uygulama haline geldi.
Uygulamayı Güncelleme
Güncellemeyi simüle etmek için, Tim Submit butonunun kodunu değiştirir:
MessageBox.Show($"Hello {mainTextBox.Text}");MessageBox.Show($"Hello {mainTextBox.Text}");Sonra uygulamayı yeniden paketler, aynı yayın ve paket komutlarını, ama güncellenmiş bir sürüm numarası ile tekrarlayarak yapar:
vpk pack --pack-id DeployDemo --pack-version 1.0.1 --pack-directory ./publishVelopack otomatik olarak delta paketler (mevcut kullanıcılar için küçük fark dosyaları) ve yeni kurulumlar için tam bir paket oluşturur. Tim, tam paketin yaklaşık 63 MB iken, delta paketin sadece 132 KB olduğunu belirtiyor — bu, Velopack'in diğer araç veya yükleyici çerçevelerinden önemli ölçüde daha hızlı ve verimli olduğunun bir kanıtıdır.
Yeni yayınları sunucu klasörüne kopyalayarak 1.0.1 sürümü için etkili bir şekilde yayın oluşturarak kopyalar.
Güncellemeyi Uygulama
Tim yüklü uygulamayı yeniden açar ve Güncelleme butonuna tıklar. Birkaç saniye içinde, Velopack indirme ve 1.0.1 güncellemesini uygular — uygulama otomatik olarak yeniden başlatılır.
Adını yazıp Gönder'e bastığında, artık "Merhaba Tim" diyor. Güncelleme çerçevesi çok hızlı çalıştı, Velopack'in sorunsuz bir şekilde entegre olduğunun ve tüm güncelleme döngüsünü hatasız bir şekilde yönettiğinin kanıtı.
Geliştiricilerin bu sürümleri Azure, dosya depolama veya bir web havuzunda barındırabileceğini ve otomatik güncelleme mantığının Windows, Linux veya macOS üzerinde hâlâ çalışacağını belirtiyor.
Basitleştirilmiş Bakım ve Esneklik
Tim, bu sürecin masaüstü uygulama bakımını son derece kolaylaştırdığını vurguluyor. Geliştiriciler, minimum yapılandırma ve dış bağımlılıklar olmadan tam otomatik güncellemeye sahip iç araçlar veya genel yazılımlar dağıtabilir.
Velopack, .NET geliştiricilerine tanıdık bir API sunarak her adımı idare eder:
Yapıları yayınlama
Paketler oluşturma
Sürümleri oluşturma
Güncellemeleri uygulama
- Temiz bir şekilde kaldırma
Tüm bunlar, karmaşık bir yapı hattı veya derin yapılandırma dosyaları gerektirmeden gerçekleşir.
Tim, Velopack'i, geliştiricilerin değerli zaman kazanmasına ve cilalı, profesyonel yazılım teslim etmelerine yardımcı olan harika bir araç olarak nitelendiriyor. Bu, çapraz platform güncellemeleri için "sadece çalışır" bir çerçevedir.
Kaldırma ve Sürüm Takibi
Tim, yüklü uygulamanın Windows'taki "Program Kaldır veya Değiştir" listesinde, 1.0.1 sürümünü göstererek göründüğünü ve kaldırmanın sorunsuz olduğunu gösteriyor — Velopack sadece klasörü silerek geride iz bırakmıyor.
Sadece WPF için değil, aynı zamanda WinForms, UNO Platform ve hatta daha eski .NET Framework 4.6.2 projeleri için de mükemmel çalıştığını ekliyor. Rust veya JavaScript gibi diğer popüler çerçeve ve dillerle uyumlu olmasının yanı sıra çapraz platform yükleyiciler için evrensel bir çözüm haline getirir.
Sonuç
Sonuç olarak, Velopack'in performansından son derece etkilenmiş olduğunu ifade ediyor. Sadece birkaç adım - aracı yüklemek, bir satır kod eklemek ve iki komut çalıştırmak - geliştiriciler basit bir .NET projesinden, tam kurulum yapılabilir, kendi kendini güncelleyen, çapraz platform uygulamalarına geçebilir.
O, Velopack geliştiricilerine böylesine harika bir mühendislik çalışması gerçekleştirdikleri için büyük bir teşekkür sunar ve onu bugün mevcut olan en iyi çapraz platform masaüstü yükleyicisi ve güncelleme çerçevesi olarak adlandırır.
Tim, seyircileri tüm detayların, komutların ve kaynak kodunun video açıklamasında mevcut olduğunu hatırlatarak bitiriyor. Geliştiricileri, fikirleri tartışmaya, özellik talep etmeye ve projenin geleceğine katkıda bulunmak için kamu havuzu aracılığıyla teşvik ediyor.

