- Konu sahibi
- #1
İlk olarak uygulamanın ailesini istediğini hata penceresinden veya uygulama klasöründeki
“.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
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:
Uygulama klasöründe uygulama adıyla başlayan ve
Buradaki
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.
Windows'ta Komut İstemi veya PowerShell açın ve şu komutu çalıştırın:
Komut çalışmıyorsa
Bu kontrolü hata mesajıyla karşılaştırın. Hata
Daha ayrıntılı bilgi için şu komutu da kullanabilirsiniz:
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
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
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:
Hata metninde
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:
Buradaki
Hata
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
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:
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
Uygulama yalnızca tek bir
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.
.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.Appveya.NET Framework. - İstenen sürüm: Örneğin
8.0.x,9.0.xya da4.8. - Mimari:
x64,x86veyaARM64. - 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.jsonve uygulamanın ana.dllveya.exedosyası aynı yayın klasöründe mi?- Kurulumdan sonra Komut İstemi kapatılıp yeniden açılarak
dotnet --list-runtimeskomutu tekrar çalıştırıldı mı?
.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 durum | Anlamı | İzlenecek yol |
|---|---|---|
| Hata belirli bir framework ve sürüm istiyor, listede yok | Gerekli runtime eksik | Aynı framework ailesi, sürüm ailesi ve mimariye uygun runtime'ı yükleyin |
| Temel runtime var, WindowsDesktop runtime yok | WPF veya Windows Forms bileşeni eksik olabilir | Desktop Runtime'ı yükleyin |
| SDK var, gerekli runtime yok | Geliştirme araçları kurulu; çalıştırma bileşeni eksik | SDK yerine gereken runtime ailesini kurun |
| Runtime listede var, hata sürüyor | Sorun sürüm, mimari, yayın klasörü veya başka bağımlılık olabilir | Hata metnini, dosya klasörünü ve mimariyi karşılaştırın |
| Framework 3.5 veya 4.x istiyor | Framework kullanılıyor | Windows özelliklerini Framework kurulumunu kontrol edin |
| Self-contained yayın olduğu hâlde açılmıyor | Eksik runtime yerine dosya, mimari veya yerel bağımlılık sorunu olabilir | Yayın klasörünün tamamını ve hedef işletim sistemi uyumluluğunu kontrol edin |
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.