Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Doğrudan koda atlamadan önce, önerilen geçiş öncesi adımların üzerinden geçmek için zaman ayırın. Bu makale, karşılaşabileceğiniz sorun türleri hakkında içgörü sağlar ve en mantıklı yaklaşıma karar vermenize yardımcı olur.
Önemli
API Portu, .NET Yükseltme Yardımcısı aracıyla yapılan ikili analiz tercih edilerek kullanım dışı bırakıldı. API Bağlantı Noktası'nın arka uç hizmeti kapatıldı, bu nedenle aracı kullanmak için çevrimdışı kullanmanız gerekir. Daha fazla bilgi için bkz: .NET API Port README.
Kodunuzu taşıma
Daha fazla devam etmeden önce kodu taşıma önkoşullarını uyguladığınıza emin olun. Sizin için en iyi yaklaşıma karar vermek için hazır olun ve kodu taşımaya başlayın.
Önemli
.NET Yükseltme Yardımcısı resmi olarak kullanım dışıdır. Bunun yerine Visual Studio 2026 ve Visual Studio 2022 17.14.16 veya sonraki sürümlerde bulunan GitHub Copilot modernleştirme sohbet aracısını kullanın. Bu aracı projelerinizi ve bağımlılıklarınızı analiz eder, hedeflenen öneriler ve otomatik kod düzeltmeleri içeren adım adım bir geçiş planı oluşturur ve her değişikliği işleyerek doğrulayabilir veya geri alabilirsiniz. Proje dosyalarını güncelleştirme, kullanım dışı API'leri değiştirme ve derleme sorunlarını çözme gibi yaygın taşıma görevlerini otomatikleştirir, böylece el ile daha az çabayla daha hızlı modernleştirebilirsiniz.
Öncelikli olarak derleyiciyle anlaşma
Bu yaklaşım, çok fazla .NET Framework API'sini kullanmayan küçük projeler veya projeler için iyi çalışır. Yaklaşım basittir:
- İsteğe bağlı olarak, projenizde ApiPort'u çalıştırın. ApiPort çalıştırıyorsanız, gidermeniz gereken sorunlar hakkında rapordan bilgi edinin.
- Tüm kodunuzu yeni bir .NET projesine kopyalayın.
- Taşınabilirlik raporuna başvururken (oluşturulduysa), proje tam olarak derlenene kadar derleyici hatalarını çözün.
Yapılandırılmamış olsa da, bu kod odaklı yaklaşım genellikle sorunları hızla çözer. Yalnızca veri modellerini içeren bir proje bu yaklaşım için ideal bir aday olabilir.
Taşınabilirlik sorunları çözülene kadar .NET Framework'te kalın
İşlemin tamamında derlenen koda sahip olmak istiyorsanız bu yaklaşım en iyi yöntem olabilir. Yaklaşım aşağıdaki gibidir:
- ApiPort'u bir projede çalıştırın.
- Taşınabilir farklı API'ler kullanarak sorunları giderin.
- Doğrudan alternatif kullanmanızın engellendiği alanları not alın.
- Her birinin yeni bir .NET projesine kopyalanmaya hazır olduğundan emin olana kadar, taşımakta olduğunuz tüm projeler için önceki adımları yineleyin.
- Kodu yeni bir .NET projesine kopyalayın.
- Belirttiğiniz doğrudan bir alternatif olmayan sorunlara çözüm bulun.
Bu dikkatli yaklaşım yalnızca derleyici hatalarını çözmekten daha yapılandırılmıştır, ancak yine de nispeten kod odaklıdır ve her zaman derlenen koda sahip olma avantajına sahiptir. Yalnızca başka bir API kullanarak giderilemeyen bazı sorunları çözme yönteminiz büyük ölçüde farklılık gösterir. Bir sonraki yaklaşımda ele alınan belirli projeler için daha kapsamlı bir plan geliştirmeniz gerektiğini fark edebilirsiniz.
Kapsamlı bir saldırı planı geliştirme
Bu yaklaşım, .NET'i desteklemek için kodu yeniden yapılandırmak veya kodun belirli alanlarını tamamen yeniden yazmak gerekebileceği daha büyük ve daha karmaşık projeler için en iyi yöntem olabilir. Yaklaşım aşağıdaki gibidir:
ApiPort'u bir projede çalıştırın.
Taşınabilir olmayan her türün nerede kullanıldığını ve bunun genel taşınabilirliği nasıl etkilediğini anlayın.
- Bu türlerin doğasını anlayın. Sayıca küçük mü ama sık kullanılıyorlar mı? Sayıca büyükler ama seyrek mi kullanılıyorlar? Kullanımları yoğun mu yoksa kodunuz genelinde mi yayılıyor?
- Daha etkili bir şekilde başa çıkabilmeniz için taşınabilir olmayan kodu yalıtmak kolay mı?
- Kodunuzu yeniden düzenlemeniz gerekiyor mu?
- Taşınabilir olmayan türler için aynı görevi yerine getiren alternatif API'ler var mı? Örneğin, sınıfını WebClient kullanıyorsanız bunun yerine sınıfını HttpClient kullanın.
- Farklı platformlar için doğrudan bir yedek olmasa bile, bir görevi yerine getirecek farklı taşınabilir API'ler var mı? Örneğin, XML'yi ayrıştırmak için XmlSchema kullanıyorsanız ancak XML şema keşfine ihtiyacınız yoksa, System.Xml.Linq API'lerini kullanabilir ve bir API'ye güvenmek yerine ayrıştırmayı kendiniz gerçekleştirebilirsiniz.
Taşıması zor derlemeleriniz varsa, bunları şimdilik .NET Framework'te bırakmaya değer mi? Dikkate alınması gereken bazı şeyler şunlardır:
- Kitaplığınızda .NET Framework veya Windows'a özgü işlevlere çok fazla bağlı olduğundan .NET ile uyumsuz bazı işlevleriniz olabilir. Bu işlevi şimdilik geride bırakmak ve kaynaklar özellikleri taşımaya hazır olana kadar kitaplığınızın daha az özelliğe sahip geçici bir .NET sürümünü yayınlamaya değer mi?
- Yeniden düzenleme yardımcı olur mu?
Kullanılamayan bir .NET Framework API'sini kendi uygulamanızı yazmak mantıklı mı?
.NET Framework başvuru kaynağındaki kodu kopyalamayı, değiştirmeyi ve kullanmayı düşünebilirsiniz. Başvuru kaynak kodu MIT Lisansı kapsamında lisanslandığından, kaynağı kendi kodunuz için temel olarak kullanma özgürlüğüne sahip olursunuz. Kodunuzda Microsoft'u düzgün bir şekilde ilişkilendirin.
Bu işlemi farklı projeler için gerektiği gibi yineleyin.
Analiz aşaması, kod tabanınızın boyutuna bağlı olarak biraz zaman alabilir. Bu aşamada, gerekli değişikliklerin kapsamını iyice anlamak ve bir plan geliştirmek için zaman harcamak, özellikle karmaşık bir kod tabanınız varsa genellikle sonunda size zaman kazandırır.
Planınız, .NET Framework 4.7.2'yi hedeflemeye devam ederken kod tabanınızda önemli değişiklikler yapmayı içerebilir. Bu, önceki yaklaşımın daha yapılandırılmış bir sürümüdür. Planınızı yürütme yönteminiz kod tabanınıza bağlıdır.
Karma yaklaşım
Yukarıdaki yaklaşımları proje bazında karıştırmanız olasıdır. Sizin için ve kod tabanınız için en mantıklı olanı yapın.
Testlerinizi taşıma
Kodunuzu taşıma sırasında her şeyin çalıştığından emin olmak için en iyi yol kodunuzu .NET'e aktarırken test etmektir. Bunu yapmak için .NET için testler derleyen ve çalıştıran bir test çerçevesi kullanmanız gerekir. Şu anda üç seçeneğiniz vardır:
Önerilen yaklaşım
Sonuç olarak, taşıma eforu büyük ölçüde .NET Framework kodunuzun nasıl yapılandırıldığına bağlıdır. Kodunuzu taşımanın iyi bir yolu, kodunuzun temel bileşenleri olan kitaplığınızın tabanıyla başlamaktır. Bu veri modelleri veya diğer her şeyin doğrudan veya dolaylı olarak kullandığı bazı temel sınıflar ve yöntemler olabilir.
- Şu anda port ettiğiniz kitaplığınızın katmanını test eden test projesini port edin.
- Kitaplığınızın tabanını yeni bir .NET projesine kopyalayın ve desteklemek istediğiniz .NET Standard sürümünü seçin.
- Kodu derlemek için gerekli değişiklikleri yapın. Bunun büyük bir kısmı csproj dosyanıza NuGet paket bağımlılıkları eklemeyi gerektirebilir.
- Testleri çalıştırın ve gerekli ayarlamaları yapın.
- Sonraki kod katmanını seçin ve önceki adımları tekrarlayın.
Kitaplığınızın tabanından başlayıp tabandan dışarı doğru hareket edip her katmanı gerektiği gibi test ederseniz, taşıma, sorunların tek seferde bir kod katmanına yalıtıldığı sistematik bir işlemdir.