Platformlar arası hedefleme
Modern .NET birden çok işletim sistemini ve cihazı destekler. Azure'da barındırılan bir ASP.NET web sitesi veya Unity'de bir .NET oyunu geliştiren .NET açık kaynak kitaplıkların mümkün olduğunca çok geliştiriciyi desteklemesi önemlidir.
.NET ve .NET Standard hedefleri
.NET ve .NET Standard hedefleri, .NET kitaplığına platformlar arası destek eklemenin en iyi yoludur.
- .NET Standard tüm .NET uygulamaları üzerinde kullanılabilen .NET API'lerinin belirtimidir. .NET Standard'i hedeflemek, .NET Standard'nin verilen bir sürümündeki API'leri kullanmak üzere kısıtlanmış kitaplıklar üretmenize olanak sağlar. Bu, .NET Standard'nin bu sürümünü uygulayan tüm platformlar tarafından kullanılabilir.
- .NET 5, Microsoft'un etkin bir şekilde geliştirdiği bir .NET uygulamasıdır. Masaüstü uygulamaları ve platformlar arası konsol uygulamaları, bulut hizmetleri ve web siteleri için Windows bir dizi özelik ve API'ye sahip tek bir üründür.
.NET ile .NET'in karşılaştırması hakkında daha fazla bilgi .NET Standard. .NET 5 ve .NET Standard.

.NET veya .NET Standard'i hedeflemek ve projenizi başarıyla derlemek, kitaplığın tüm platformlarda başarıyla çalıştırılmalarını garanti etmemektedir:
- Platforma özgü API'ler diğer platformlarda başarısız olur. Örneğin, diğer işletim Windows kullanılırken başarılı olur ve Microsoft.Win32.Registry PlatformNotSupportedException atar.
- API'ler farklı davranislar. Örneğin, bir uygulama iOS veya UWP üzerinde zamanından önce derleme kullandığında yansıma API'lerinin farklı performans özellikleri vardır.
İpucu
.NET ekibi, olası sorunları keşfetmeye yardımcı olmak için bir Platform uyumluluk çözümleyicisi sunar.
✔️ do başlangıç olarak bir hedef netstandard2.0 dahil.
Genel amaçlı kitaplıkların çoğu, 2.0'ın .NET Standard api'lere ihtiyaçmaz. .NET Standard 2.0 tüm modern platformlar tarafından de destekler ve tek bir hedefe sahip birden çok platformu desteklemenin önerilen yoludur.
✔️ modern net5.0 bir .NET'te yeni API'ler gerekirse DO bir hedef veya daha yeni bir hedef içerir.
.NET 5 veya sonraki uygulamalar bir
netstandard2.0hedefnet5.0kullanabilir, bu nedenle gerekli değildir. Yeninet5.0.NET API'lerini kullanmak istediğinizde açıkça hedefleme ekleniyor.
❌ Bir hedef dahil OLMAKTAN netstandard1.x KAÇıNıN.
.NET Standard 1.x, büyük bir paket bağımlılık grafı oluşturan ve geliştiricilerin oluştururken çok sayıda paket indirmesi ile sonuçlanacak ayrıntılı bir NuGet paketi kümesi olarak dağıtılır. Modern .NET uygulamaları 2.0 .NET Standard destekler. Yalnızca eski bir platformu .NET Standard 1.x'i hedeflemeniz gerekir.
✔️ bir hedef gerekirse netstandard2.0 DO bir hedef netstandard1.x içerir.
.NET Standard 2.0'ı destekleyen tüm platformlar hedefi kullanır ve eski platformlar çalışmaya devam ederken daha küçük bir paket grafı kullanma avantajından faydalanarak hedefi kullanmaya
netstandard2.0netstandard1.xgeri döner.
❌ Kitaplık, platforma .NET Standard bir uygulama modeline bağlı ise bir hedef hedef eklemeYİN.
Örneğin, UWP denetim araç seti kitaplığı yalnızca UWP'de kullanılabilen bir uygulama modeline bağlıdır. Uygulama modeline özgü API'ler .NET Standard.
Çoklu hedefleme
Bazen kitaplıklardan çerçeveye özgü API'lere erişmeniz gerekir. Çerçeveye özgü API'leri çağırmanın en iyi yolu, projenizi yalnızca bir tane yerine birçok .NET hedef çerçevesi için derlemek için çoklu hedefleme kullanmaktır.
Tüketicilerinizi tek çerçeveler için derlemek zorunda kalmadan korumak için, bir .NET Standard ve çerçeveye özgü bir çıkışa sahip olmak için çabalayın. Çoklu hedefleme ile tüm derlemeler tek bir derleme paketi içinde NuGet. Tüketiciler daha sonra aynı pakete başvurur ve NuGet uygun uygulama seçer. .NET Standard kitaplığınız, NuGet paketinizin çerçeveye özgü bir uygulama sunduğu durumlar dışında her yerde kullanılan geri dönüş kitaplığı olarak kullanılır. Çoklu hedefleme, kodunda koşullu derlemeyi ve çerçeveye özgü API'leri çağırmanızı sağlar.

✔️.NET uygulamalarına ek olarak bu uygulamaları da .NET Standard.
.NET uygulamalarını hedeflemek, uygulamanın dışında olan platforma özgü API'leri .NET Standard.
Bunu .NET Standard destek bırakma. Bunun yerine, uygulamasından at ve özellik API'leri sun. Bu şekilde kitaplığınız her yerde kullanılabilir ve çalışma zamanı özelliklerini destekler.
public static class GpsLocation
{
// This project uses multi-targeting to expose device-specific APIs to .NET Standard.
public static async Task<(double latitude, double longitude)> GetCoordinatesAsync()
{
#if NET461
return CallDotNetFramworkApi();
#elif WINDOWS_UWP
return CallUwpApi();
#else
throw new PlatformNotSupportedException();
#endif
}
// Allows callers to check without having to catch PlatformNotSupportedException
// or replicating the OS check.
public static bool IsSupported
{
get
{
#if NET461 || WINDOWS_UWP
return true;
#else
return false;
#endif
}
}
}
❌ Kaynak kodunuz tüm hedeflerde aynı .NET Standard, çoklu hedeflemeden ve hedeften kaçının.
.NET Standard derlemesi, otomatik olarak NuGet. Tek tek .NET uygulamaları hedeflenin, hiçbir
*.nupkgavantaja gerek yoktur.
✔️ için hedef eklemeyi net461 netstandard2.0 DÜŞÜNÜN.
.NET Standard 2.0 .NET Framework 4.7.2'de .NET Framework bazı sorunlar giderildi. Hala .NET Framework 4.6.1 - 4.7.1'de olan geliştiricilere, .NET Framework 4.6.1 için geliştirilmiş bir ikili dosya sunarak deneyimi geliştirin.
✔️ DO ile kitaplığınızı bir NuGet dağıtabilirsiniz.
NuGet geliştirici için en iyi hedefi seçer ve uygun uygulama seçmek zorunda kalmalarını sağlar.
✔️ hedeflemede proje dosyasının TargetFrameworks özelliğini KULLANIN.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- This project will output netstandard2.0 and net461 assemblies -->
<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
</PropertyGroup>
</Project>
✔️ KULLANARAK GÖZ ÖNÜNDE MSBUILD. Proje dosyanızı büyük ölçüde basitleştirerek UWP ve Xamarin için çoklu hedeflemede Sdk.Extras.
Eski hedefler
.NET, hem destek .NET Framework hem de artık yaygın olarak kullanılmayan platformların hedef sürümlerini destekler. Kitaplığınızı mümkün olduğunca çok hedef üzerinde çalışır hale getirirken, eksik API'ler üzerinde çalışma yapmak önemli bir ek yüke neden olabilir. Bazı çerçevelerin, ulaşıldıklarına ve sınırlamalarına bakarak artık hedeflemeye değmeyeceklerine inanıyoruz.
❌ Taşınabilir Sınıf Kitaplığı (PCL) hedefi EKLEMEYİN. Örneğin, portable-net45+win8+wpa81+wp8.
.NET Standard platformlar arası .NET kitaplıklarını desteklemenin modern yoludur ve PCL'lerin yerini almaktadır.
❌ Artık desteklen .NET platformlarının hedeflerini DAHIL EDMİN. Örneğin, SL4 , WP .