Mehmet

WFN Üye
Konular
1,067
Mesajlar
1,068
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
İlk olarak uygulamanın ailesini istediğini hata penceresinden veya uygulama klasöründeki .runtimeconfig.json dosyasından belirleyin. Hata iletisinde Microsoft.NETCore.App, Microsoft.WindowsDesktop.App ya da Microsoft.AspNetCore.App ile birlikte bir sürüm ve mimari yazıyorsa, başka bilgisayarda eksik olan çalışma zamanını aynı sürüm ailesi ve mimariyle yüklemek gerekir. Uygulama .NET Framework istiyorsa denetim farklıdır. Gerekli bileşen yüklü olduğu hâlde uygulama açılmıyorsa sorun artık yalnızca olmayabilir; yanlış mimari, eksik uygulama dosyası, yerel bir DLL veya Windows bağımlılığı da incelenmelidir.

Önce uygulamanın türünü istediğini ayırın​


“.NET eksik” ifadesi tek bir bileşeni göstermez. sürümleriyle oluşturulan uygulamalar genellikle belirli bir çalışma zamanı ailesini ister. Eski Windows masaüstü uygulamaları ise .NET Framework adı verilen ayrı bir çalışma ortamına dayanabilir.

Uygulamanın açılmadığı bilgisayarda hata penceresinin tamamını okuyup mümkünse ekran görüntüsünü kaydedin. Özellikle şu bilgileri not alın:
  • İstenen framework adı: Microsoft.NETCore.App, Microsoft.WindowsDesktop.App, Microsoft.AspNetCore.App veya .NET Framework.
  • İstenen sürüm: Örneğin 8.0.x, 9.0.x ya da 4.8.
  • Mimari: x64, x86 veya ARM64.
  • Uygulamanın framework-dependent mı, yoksa self-contained mı dağıtıldığına ilişkin ifade.
Microsoft.WindowsDesktop.App ifadesi Windows Forms veya WPF gibi masaüstü bileşenlerinin gerektiğini gösterir. Bu durumda yalnızca temel .NET Runtime paketini yüklemek yeterli olmayabilir; Windows masaüstü çalışma zamanını içeren paketin seçilmesi gerekir. Microsoft.AspNetCore.App ise Core uygulamalarında kullanılan çalışma zamanı ailesidir. Basit bir masaüstü uygulamasında bu adın görülmesi beklenmez.

Hata iletisi yeterli değilse gerekli sürümü dosyadan okuyun​


Uygulama klasöründe uygulama adıyla başlayan ve .runtimeconfig.json uzantısıyla biten dosyayı bulun. Örneğin dosya adı Muhasebe.runtimeconfig.json olabilir. Dosyayı Not Defteri ile açın. İçerikte aşağıdakine benzer bir bölüm arayın:

JSON:
{
  "runtimeOptions": {
    "tfm": "net8.0-windows",
    "frameworks": [
      {
        "name": "Microsoft.WindowsDesktop.App",
        "version": "8.0.0"
      }
    ]
  }
}

Buradaki name hangi framework ailesinin gerektiğini, version ise uygulamanın istediği asgari sürüm ailesini gösterir. tfm değeri net8.0-windows gibi görünüyorsa bu, uygulamanın.NET 8 ve Windows hedefiyle oluşturulduğunu anlatır; ancak yüklenecek paketi belirlerken asıl önemli bilgiler frameworks bölümündeki ad, sürüm ve hata iletisindeki mimaridir.

Bu dosyanın bulunmaması iki farklı anlama gelebilir. Uygulama gerçekten self-contained yayımlanmış olabilir veya dağıtım klasörü eksik kopyalanmış olabilir. Self-contained uygulama çalışma zamanını kendi dosyalarıyla taşır; buna rağmen açılmıyorsa doğrudan runtime yüklemek yerine yayın klasörünün tamamını yeniden kopyalamak ve işletim sistemi mimarisini kontrol etmek gerekir.

Hedef bilgisayardaki kurulu çalışma zamanlarını listeleyin​


Windows'ta Komut İstemi veya PowerShell açın ve şu komutu çalıştırın:

Kod:
dotnet --list-runtimes

Komut çalışmıyorsa dotnet komutu sisteme eklenmemiş olabilir veya yalnızca klasik .NET Framework kullanılıyor olabilir. Komut çalıştığında her satırda framework adı, sürüm ve kurulum yolu görülür. Örneğin aşağıdaki satır, Microsoft.WindowsDesktop.App ailesinin 8.0 sürümüne ait x64 çalışma zamanının kurulu olduğunu gösterir:

Kod:
Microsoft.WindowsDesktop.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Bu kontrolü hata mesajıyla karşılaştırın. Hata Microsoft.WindowsDesktop.App, 8.0.x, x64 istiyor; listede yalnızca Microsoft.NETCore.App 8.0.x varsa temel runtime kurulmuş, masaüstü runtime kurulmamış demektir. Hata Microsoft.NETCore.App 9.0.x istiyor, bilgisayarda yalnızca 8.0.x varsa 8.0 kurulmuş olması 9.0 gereksinimini karşılamaz.

Daha ayrıntılı bilgi için şu komutu da kullanabilirsiniz:

Kod:
dotnet --info

Bu komut kurulu SDK'ları, runtime'ları, işletim sistemi bilgilerini ve işlemci mimarisini gösterir. Buradaki SDK sürümünün bulunması, uygulamanın çalışacağı runtime'ın bulunduğunu kanıtlamaz. Örneğin SDK yüklü olabilir ancak gerekli Microsoft.WindowsDesktop.App runtime'ı bulunmayabilir.

Sonucu nasıl yorumlamalısınız?​


Kurulu listede hata iletisindeki framework adı ve uyumlu sürüm görünmüyorsa eksik bileşen büyük olasılıkla tespit edilmiştir. Hata iletisinde yazan mimariyle eşleşen indirme sayfasından aynı framework ailesinin runtime paketini yükleyin. Uygulama masaüstü bileşeni istiyorsa .NET Desktop Runtime, yalnızca uygulaması istiyorsa .NET Runtime, Core uygulaması istiyorsa uygun ASP.NET Core Runtime seçilmelidir.

Listede daha yeni bir sürümün bulunması her zaman yeterli değildir..NET'in sürüm geçiş kuralları bazı küçük sürüm farklarında çalışabilir; ancak yalnızca daha eski sürümün bulunması veya farklı ana sürümün kurulu olması uygulamanın açılacağı anlamına gelmez. En güvenli ölçüt, hata iletisindeki framework adının ve istenen ana/ikincil sürüm ailesinin kurulu listede açıkça bulunmasıdır.

Listede gereken framework ve sürüm bulunduğu hâlde aynı hata devam ediyorsa yalnızca yeniden kurulum yapmayın. Şu bilgileri karşılaştırın:
  • Uygulamanın istediği mimari ile kurulan runtime'ın mimarisi aynı mı?
  • Uygulama gerçekten çalıştırılan klasörden mi açılıyor, yoksa eski bir kısayol başka klasörü mü gösteriyor?
  • .runtimeconfig.json, .deps.json ve uygulamanın ana .dll veya .exe dosyası aynı yayın klasöründe mi?
  • Kurulumdan sonra Komut İstemi kapatılıp yeniden açılarak dotnet --list-runtimes komutu tekrar çalıştırıldı mı?
Bu kontroller sorunu çözmüyorsa hata penceresinin tam metni, .runtimeconfig.json içeriği, dotnet --list-runtimes çıktısı, Windows sürümü ve uygulamanın hangi mimari için yayımlandığı birlikte incelenmelidir. Yalnız “.NET kurulu” bilgisi yeterli değildir; hangi framework ailesinin hangi sürüm ve mimariyle kurulu olduğu belirleyicidir.

Framework istiyorsa farklı kontrol yapın​


Hata metninde .NET Framework 4.x yazıyorsa dotnet --list-runtimes komutu doğru kontrol aracı değildir. Bu sürümler Framework ailesine aittir.

Windows'ta Denetim Masası'ndaki yüklü programlar bölümünü veya Ayarlar'daki yüklü uygulamalar listesini kontrol edebilirsiniz. Daha kesin kontrol için Kayıt Defteri Düzenleyicisi'nde şu anahtarı açın:

Kod:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full

Buradaki Release adlı değer.NET Framework 4.5 ve sonraki sürümlerin kurulu sürümünü belirtir. Örneğin 528040 veya daha yüksek bir değer.NET Framework 4.8 düzeyini, 533320 veya daha yüksek bir değer.NET Framework 4.8.1 düzeyini gösterir. Bu değer yoksa ya da Full anahtarı Framework 4.5 veya sonraki sürüm algılanmıyor olabilir.

Hata .NET Framework 3.5 istiyorsa 4.8'in kurulu olması tek başına aynı kontrol değildir..NET Framework 3.5, 2.0 ve 3.0 katmanlarını da içerir ve bazı eski uygulamalar özellikle bu özelliği ister. Bu durumda Windows'un isteğe bağlı özellikleri veya Microsoft' Framework 3.5 kurulum yöntemi kullanılmalıdır.

Sorun geliştirici tarafındaysa eksik runtime'ı kullanıcıya bırakmayın​


Uygulama başka bilgisayarlara dağıtılacaksa varsayılan framework-dependent yayın yöntemi hedef bilgisayarda runtime'ın önceden bulunmasını gerektirir. Bu nedenle yalnızca .exe dosyasını göndermek çoğu uygulaması için yeterli değildir; publish klasörünün uygulama bağımlılıklarıyla birlikte dağıtılması ve hedef bilgisayarda gerekli runtime'ın kurulması gerekir.

Kullanıcı bilgisayarına.NET kurma zorunluluğunu azaltmak istiyorsanız uygulamayı self-contained yayımlayabilirsiniz. Örneğin Windows 64 bit hedefi için proje klasöründe şu komut kullanılabilir:

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

Oluşan yayın klasörünün tamamını hedef bilgisayara kopyalayın. Bu yöntem.NET runtime dosyalarını uygulamayla birlikte taşır; ancak win-x64, win-x86 ve win-arm64 birbirinin yerine geçmez. Hedef bilgisayarın mimarisine uygun yayımlama yapılmalıdır. Ayrıca self-contained yayın, işletim sisteminin gerekli yerel bileşenlerini ve uygulamanın kullandığı tüm harici DLL'leri otomatik olarak karşılamaz.

Uygulama yalnızca tek bir .exe dosyasından oluşuyorsa bunun self-contained olduğu kesin değildir. Tek dosyalı yayın framework-dependent olarak da yapılabilir. Bu nedenle karar verirken dosya sayısına değil, projenin yayın ayarlarında SelfContained değerine ve hedef runtime'a bakın.
Görülen durumAnlamıİzlenecek yol
Hata belirli bir framework ve sürüm istiyor, listede yokGerekli runtime eksikAynı framework ailesi, sürüm ailesi ve mimariye uygun runtime'ı yükleyin
Temel runtime var, WindowsDesktop runtime yokWPF veya Windows Forms bileşeni eksik olabilir Desktop Runtime'ı yükleyin
SDK var, gerekli runtime yokGeliştirme araçları kurulu; çalıştırma bileşeni eksikSDK yerine gereken runtime ailesini kurun
Runtime listede var, hata sürüyorSorun sürüm, mimari, yayın klasörü veya başka bağımlılık olabilirHata metnini, dosya klasörünü ve mimariyi karşılaştırın
Framework 3.5 veya 4.x istiyor Framework kullanılıyorWindows özelliklerini Framework kurulumunu kontrol edin
Self-contained yayın olduğu hâlde açılmıyorEksik runtime yerine dosya, mimari veya yerel bağımlılık sorunu olabilirYayın klasörünün tamamını ve hedef işletim sistemi uyumluluğunu kontrol edin
Tablodaki son iki durum özellikle önemlidir: Kurulu runtime'ı kontrol etmek yalnızca framework-dependent uygulamalarda doğrudan sonuç verir. Self-contained bir uygulamada aynı yöntemi uygulamak, asıl sorunu yanlış yerde aramanıza neden olabilir.

Sık sorulan sorular​

Başka bilgisayarda yalnızca.NET SDK kurmak yeterli olur mu?​

Genellikle hayır. SDK derleme ve geliştirme araçlarını içerir; uygulamanın çalışması için hata iletisinde belirtilen runtime ailesinin de bulunması gerekir. Son kullanıcı bilgisayarında çoğu durumda SDK yerine uygun runtime kurulmalıdır.

8 9 isteyen uygulama neden açılmıyor?​

Ana ve ikincil sürüm ailesi farklı olduğu için.NET 9 gereksinimini otomatik olarak karşılamayabilir. Uygulamanın gerçekten hangi sürümü istediğini .runtimeconfig.json ve hata metninden kontrol edip buna uygun sürümü kurun veya uygulamayı mevcut sürüme göre yeniden yayımlayın.

x64 runtime kurulu olduğu hâlde uygulama neden çalışmıyor?​

Uygulama x86 veya ARM64 için yayımlanmış olabilir. Hata iletisindeki mimariyle kurulu runtime'ın mimarisini karşılaştırın. Ayrıca uygulamanın kullandığı yerel DLL'ler de aynı mimariyle uyumlu olmalıdır; runtime'ın kurulu olması bu DLL'lerin doğru olduğu anlamına gelmez.

Uygulama klasöründe runtimeconfig.json yoksa ne yapmalıyım?​

Uygulamanın self-contained yayımlanıp yayımlanmadığını ve klasörün eksiksiz kopyalanıp kopyalanmadığını kontrol edin. Framework-dependent bir uygulamada bu dosyanın eksik olması, yayın işleminin veya dosya kopyalamanın hatalı olduğuna işaret edebilir. En güvenli çözüm, projeden yeniden dotnet publish almak ve oluşan yayın klasörünün tamamını dağıtmaktır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic