.NET Framework'den .NET'e taşımaya genel bakış

Bu makalede kodunuzu .NET Framework'den .NET'e (eski adıyla .NET Core) aktarırken dikkate almanız gerekenlere genel bir bakış sağlanır. Birçok proje için .NET Framework'den .NET'e taşıma işlemi oldukça basittir. Projelerinizin karmaşıklığı, proje dosyalarının ilk geçişinin ardından ne kadar çalışma yapacağınızı belirler.

Uygulama modelinin .NET'te (kitaplıklar, konsol uygulamaları ve masaüstü uygulamaları gibi) kullanılabildiği projeler genellikle çok az değişiklik gerektirir. ASP.NET'dan ASP.NET Core geçmek gibi yeni bir uygulama modeli gerektiren projeler daha fazla çalışma gerektirir. Eski uygulama modelindeki birçok desen, dönüştürme sırasında kullanılabilecek eşdeğerlere sahiptir.

masaüstü teknolojilerini Windows

.NET Framework için oluşturulan birçok uygulama Windows Forms veya Windows Presentation Foundation (WPF) gibi bir masaüstü teknolojisi kullanır. Hem Windows Forms hem de WPF .NET'e taşınabilir, ancak bunlar yalnızca Windows teknolojiler olarak kalır.

bir Windows Forms veya WPF uygulamasını geçirmeden önce aşağıdaki bağımlılıkları göz önünde bulundurun:

  1. .NET için Project dosyaları .NET Framework farklı bir biçim kullanır.
  2. Projeniz .NET'te bulunmayan bir API kullanabilir.
  3. Üçüncü taraf denetimleri ve kitaplıkları .NET'e taşımamış ve yalnızca .NET Framework için kullanılabilir durumda kalabilir.
  4. Projeniz artık .NET'te bulunmayan bir teknoloji kullanıyor.

.NET, Windows Forms ve WPF'nin açık kaynak sürümlerini kullanır ve .NET Framework üzerinde geliştirmeler içerir.

Masaüstü uygulamanızı .NET 6'ya geçirme öğreticileri için aşağıdaki makalelerden birine bakın:

Windows özgü API'ler

Uygulamalar yine de .NET tarafından desteklenen platformlarda yerel kitaplıkları p/invoke edebilir. Bu teknoloji Windows ile sınırlı değildir. Ancak, başvuruda bulunmakta olduğunuz kitaplıkuser32.dllveya kernel32.dll gibi Windows özgüyse kod yalnızca Windows üzerinde çalışır. Uygulamanızın üzerinde çalışmasını istediğiniz her platform için platforma özgü sürümleri bulmanız veya kodunuzu tüm platformlarda çalışacak kadar genel hale getirmeniz gerekir.

Bir uygulamayı .NET Framework'den .NET'e geçirirken, uygulamanız büyük olasılıkla .NET Framework dağıtılmış olarak sağlanan bir kitaplık kullandı. .NET Framework'de kullanılabilen birçok API, Windows Kayıt Defteri veya GDI+ çizim modeli gibi Windows özgü teknolojiye bağlı olduğundan .NET'e aktarılmamıştır.

Windows Uyumluluk Paketi, .NET'e .NET Framework API yüzeyinin büyük bir bölümünü sağlar ve Microsoft.Windows aracılığıyla sağlanır. Uyumluluk NuGet paketi.

Daha fazla bilgi için bkz. .NET'e bağlantı noktası kodu almak için Windows Uyumluluk Paketi'ni kullanma.

uyumluluk modunu .NET Framework

.NET Framework uyumluluk modu .NET Standard 2.0'da kullanıma sunulmuştur. Bu uyumluluk modu, .NET Standard ve .NET 5+ (ve .NET Core 3.1) projelerinin yalnızca Windows'da .NET Framework kitaplıklara başvurmasını sağlar. Kitaplıkta Windows Presentation Foundation (WPF) API'leri kullanılıyorsa, ancak birçok taşıma senaryosunun engelini kaldırması gibi .NET Framework kitaplıklara başvurmak tüm projelerde çalışmaz. Daha fazla bilgi için bkz. .NET Framework 'den .NET'e bağlantı noktası koduna bağımlılıklarınızı analiz etme.

Kullanılamayan teknolojiler

.NET Framework'de .NET'te mevcut olmayan birkaç teknoloji vardır:

  • Uygulama etki alanları

    Ek uygulama etki alanları oluşturma desteklenmez. Kod yalıtımı için alternatif olarak ayrı işlemler veya kapsayıcılar kullanın.

  • Remoting

    Uzaktan iletişim, artık desteklenmeyen uygulama etki alanları arasında iletişim kurmak için kullanılır. İşlemler arasında basit iletişim için, sınıf veya MemoryMappedFile sınıf gibi uzaktan iletişime alternatif olarak System.IO.Pipes işlemler arası iletişim (IPC) mekanizmalarını göz önünde bulundurun. Daha karmaşık senaryolar için StreamJsonRpc veya ASP.NET Core (gRPC veya RESTful Web API hizmetlerini kullanarak) gibi çerçeveleri göz önünde bulundurun.

  • Kod erişim güvenliği (CAS)

    CAS, .NET Framework tarafından desteklenen ancak .NET Framework 4.0'da kullanım dışı bırakılan bir korumalı alan tekniğiydi. Güvenlik Saydamlığı ile değiştirildi ve .NET'te desteklenmiyor. Bunun yerine sanallaştırma, kapsayıcılar veya kullanıcı hesapları gibi işletim sistemi tarafından sağlanan güvenlik sınırlarını kullanın.

  • Güvenlik saydamlığı

    CAS'ye benzer şekilde, bu korumalı alan tekniği artık .NET Framework uygulamalar için önerilmez ve .NET'te desteklenmez. Bunun yerine sanallaştırma, kapsayıcılar veya kullanıcı hesapları gibi işletim sistemi tarafından sağlanan güvenlik sınırlarını kullanın.

  • System.EnterpriseServices

    System.EnterpriseServices (COM+) .NET'te desteklenmez.

  • Windows Workflow Foundation (WF)

    WF , .NET 5+ içinde (.NET Core dahil) desteklenmez. Alternatif olarak bkz . CoreWF.

Bu desteklenmeyen teknolojiler hakkında daha fazla bilgi için bkz. .NET Core ve .NET 5+ üzerinde kullanılamayan .NET Framework teknolojiler.

Platformlar arası

.NET (eski adıyla .NET Core), platformlar arası olacak şekilde tasarlanmıştır. Kodunuz Windows özgü teknolojilere bağımlı değilse macOS, Linux ve Android gibi diğer platformlarda çalıştırılabilir. Bu, aşağıdaki gibi proje türlerini içerir:

  • Kitaplıklar
  • Konsol tabanlı araçlar
  • Otomasyon
  • siteleri ASP.NET

.NET Framework yalnızca Windows bir bileşendir. Kodunuz Windows Forms ve Windows Presentation Foundation (WPF) gibi Windows özgü teknolojileri veya API'leri kullandığında, kod .NET üzerinde çalışmaya devam edebilir ancak diğer işletim sistemlerinde çalışmaz.

Kitaplığınız veya konsol tabanlı uygulamanız çok fazla değişiklik yapmadan platformlar arası kullanılabilir. .NET'e taşıma sırasında bunu dikkate alıp uygulamanızı diğer platformlarda test etmek isteyebilirsiniz.

.NET Standard'ın geleceği

.NET Standard, birden çok .NET uygulamasında kullanılabilen .NET API'lerinin resmi bir belirtimidir. .NET Standard'ın arkasındaki motivasyon, .NET ekosisteminde daha fazla tekdüzenlik sağlamaktı. .NET 5'den başlayarak, tekdüzenlik oluşturma konusunda farklı bir yaklaşım benimsenmiştir ve bu yeni yaklaşım birçok senaryoda .NET Standard gereksinimini ortadan kaldırmıştır. Daha fazla bilgi için bkz. .NET 5 ve .NET Standard.

.NET Standard 2.0, .NET Framework destekleyen son sürümdü.

Taşımaya yardımcı olacak araçlar

Bir uygulamayı .NET Framework'den .NET'e el ile taşıma yerine, geçişin bazı yönlerini otomatikleştirmeye yardımcı olmak için farklı araçlar kullanabilirsiniz. Karmaşık bir projeyi taşıma, kendi içinde karmaşık bir işlemdir. Bu araçlar bu yolculukta yardımcı olabilir.

Uygulamanızı taşımaya yardımcı olmak için bir araç kullansanız bile, bu makaledeki Taşıma sırasında dikkat edilmesi gerekenler bölümünü gözden geçirmelisiniz.

.NET Yükseltme Yardımcısı

.NET Yükseltme Yardımcısı, farklı türlerde .NET Framework uygulamalarında çalıştırılabilir bir komut satırı aracıdır. .NET Framework uygulamalarını .NET 5'e yükseltmeye yardımcı olmak için tasarlanmıştır. Aracı çalıştırdıktan sonra, çoğu durumda uygulama geçişi tamamlamak için daha fazla çaba gerektirir. Araç, geçişi tamamlamaya yardımcı olabilecek çözümleyicilerin yüklenmesini içerir. Bu araç aşağıdaki .NET Framework uygulama türlerinde çalışır:

  • Windows Forms
  • WPF
  • ASP.NET MVC
  • Konsol
  • Sınıf kitaplıkları

Bu araç, bu makalede listelenen diğer araçları kullanır ve geçiş işlemine yol gösterir. Araç hakkında daha fazla bilgi için bkz. .NET Yükseltme Yardımcısı'na genel bakış.

try-convert

Dönüştürmeyi deneme aracı, masaüstü uygulamalarını .NET 5'e taşıma dahil olmak üzere bir projeyi veya çözümün tamamını .NET SDK'sına dönüştürebilen bir .NET genel aracıdır. Ancak projenizde özel görevler, hedefler veya içeri aktarmalar gibi karmaşık bir derleme işlemi varsa bu araç önerilmez.

Daha fazla bilgi için bkz. try-convert GitHub deposu.

.NET Taşınabilirlik Çözümleyicisi

.NET Taşınabilirlik Çözümleyicisi, derlemeleri analiz eden ve uygulamaların veya kitaplıkların belirtilen hedeflenen .NET platformlarınızda taşınabilir olması için eksik olan .NET API'leri hakkında ayrıntılı bir rapor sağlayan bir araçtır.

.NET Taşınabilirlik Çözümleyicisi'ni Visual Studio kullanmak için uzantıyı marketten yükleyin.

Daha fazla bilgi için bkz. .NET Taşınabilirlik Çözümleyicisi.

Platform uyumluluk çözümleyicisi

Platform uyumluluğu çözümleyicisi, çalışma zamanında oluşturacak PlatformNotSupportedException bir API kullanıp kullanmadığınızı analiz eder. .NET Framework 4.7.2 veya üzeri bir sürümden geçiyorsanız bu yaygın olmasa da, kontrol etmek iyi bir seçenektir. .NET'te özel durumlar oluşturan API'ler hakkında daha fazla bilgi için bkz. .NET Core'da her zaman özel durumlar oluşturan API'ler.

Daha fazla bilgi için bkz. Platform uyumluluğu çözümleyicisi.

Taşıma sırasında dikkat edilmesi gerekenler

Uygulamanızı .NET'e taşıma sırasında aşağıdaki önerileri sırasıyla göz önünde bulundurun.

✔️ Projelerinizi geçirmek için .NET Yükseltme Yardımcısı'nı kullanmayı GÖZ ÖNÜNDE BULUNDURUN. Bu araç önizleme aşamasında olsa da, bu makalede ayrıntılı olarak sunulan el ile gerçekleştirilen adımların çoğunu otomatikleştirir ve geçiş yolunuz devam etmesi için size harika bir başlangıç noktası sağlar.

✔️ Önce bağımlılıklarınızı incelemeyi GÖZ ÖNÜNDE BULUNDURUN. Bağımlılıklarınız .NET 5, .NET Standard veya .NET Core'u hedeflemelidir.

✔️ DO, bir NuGet packages.config dosyasından proje dosyasındaki ayarlara PackageReference geçiş yapar. Dosyayı dönüştürmek package.configiçin Visual Studio kullanın.

✔️ Uygulamanızı henüz taşımasanız bile en son proje dosyası biçimine yükseltmeyi GÖZ ÖNÜNDE BULUNDURUN. .NET Framework projeler eski bir proje biçimi kullanır. SDK stili projeler olarak bilinen en son proje biçimi .NET Core ve ötesinde oluşturulmuş olsa da, .NET Framework ile çalışır. Proje dosyanızın en son biçimde olması, gelecekte uygulamanızı taşımanız için iyi bir temel sağlar.

✔️ DO .NET Framework projenizi en az .NET Framework 4.7.2'ye yeniden hedefleyin. Bu, .NET Standard'ın mevcut API'leri desteklemediği durumlar için en son API alternatiflerinin kullanılabilirliğini sağlar.

✔️ .NET Core 3.1 yerine .NET 5'i hedeflemeYI GÖZ ÖNÜNDE BULUNDURUN. .NET Core 3.1 uzun vadeli destek (LTS) altında olsa da, .NET 5 en son sürümdür ve .NET 6 yayınlandığında LTS olacaktır.

✔️ Windows Forms ve WPF projeleri için .NET 5'i HEDEFLE. .NET 5, Masaüstü uygulamalarına yönelik birçok geliştirme içerir.

✔️ .NET Framework projeleriyle de kullanılabilecek bir kitaplığı geçiriyorsanız .NET Standard 2.0'ı hedeflemeyi GÖZ ÖNÜNDE BULUNDURUN. Ayrıca hem .NET Framework hem de .NET Standard'ı hedefleyerek kitaplığınızı birden çok hedefleyebilirsiniz.

✔️ MICROSOFT.Windows başvurusu ekleme. Geçiş sonrasında eksik API'ler ile ilgili hatalar alırsanız uyumluluk NuGet paketi. .NET Framework API yüzeyinin büyük bir bölümü NuGet paketi aracılığıyla .NET tarafından kullanılabilir.

Ayrıca bkz.