Memvalidasi kerangka kerja yang kompatibel
Paket yang berisi kerangka kerja yang kompatibel perlu memastikan bahwa kode yang dikompilasi terhadap satu dapat berjalan terhadap yang lain. Contoh pasangan kerangka kerja yang kompatibel adalah:
- .NET Standard 2.0 dan .NET 7
- .NET 6 dan .NET 7
Dalam kedua kasus ini, konsumen dapat membangun terhadap .NET Standard 2.0 atau .NET 6 dan berjalan pada .NET 7. Jika biner Anda tidak kompatibel antara kerangka kerja ini, konsumen dapat berakhir dengan kesalahan waktu kompilasi atau run-time.
Validasi paket menangkap kesalahan ini pada waktu paket. Berikut adalah contoh skenario:
Misalkan Anda menulis game yang memanipulasi string. Anda perlu mendukung konsumen .NET Framework dan .NET (.NET Core). Awalnya, proyek Anda menargetkan .NET Standard 2.0, tetapi sekarang Anda ingin memanfaatkan Span<T>
di .NET 6 untuk menghindari alokasi string yang tidak perlu. Untuk melakukannya, Anda ingin multi-target untuk .NET Standard 2.0 dan .NET 6.
Anda telah menulis kode berikut:
#if NET6_0_OR_GREATER
public void DoStringManipulation(ReadOnlySpan<char> input)
{
// use spans to do string operations.
}
#else
public void DoStringManipulation(string input)
{
// Do some string operations.
}
#endif
Anda kemudian mencoba mengemas proyek (menggunakan dotnet pack
atau Visual Studio), dan gagal dengan kesalahan berikut:
D:\demo>dotnet pack
Microsoft (R) Build Engine version 17.0.0-preview-21460-01+8f208e609 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
PackageValidationThrough -> D:\demo\bin\Debug\netstandard2.0\PackageValidationThrough.dll
PackageValidationThrough -> D:\demo\bin\Debug\net6.0\PackageValidationThrough.dll
Successfully created package 'D:\demo\bin\Debug\PackageValidationThrough.1.0.0.nupkg'.
C:\Program Files\dotnet\sdk\6.0.100-rc.1.21463.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Compatibility.Common.targets(32,5): error CP0002: Member 'A.B.DoStringManipulation(string)' exists on lib/netstandard2.0/PackageValidationThrough.dll but not on lib/net6.0/PackageValidationThrough.dll [D:\demo\PackageValidationThrough.csproj]
Anda menyadari bahwa alih-alih mengecualikan DoStringManipulation(string)
untuk .NET 6, Anda hanya perlu memberikan metode tambahan DoStringManipulation(ReadOnlySpan<char>)
untuk .NET 6:
#if NET6_0_OR_GREATER
public void DoStringManipulation(ReadOnlySpan<char> input)
{
// use spans to do string operations.
}
#endif
public void DoStringManipulation(string input)
{
// Do some string operations.
}
Anda mencoba mengemas proyek lagi, dan berhasil.
Mode ketat
Anda dapat mengaktifkan mode ketat untuk validator ini dengan mengatur EnableStrictModeForCompatibleFrameworksInPackage
properti dalam file proyek Anda. Mengaktifkan mode ketat mengubah beberapa aturan dan menjalankan beberapa aturan lain saat mendapatkan perbedaan. Ini berguna ketika Anda ingin kedua belah pihak Anda membandingkan dengan benar-benar sama pada area permukaan dan identitas mereka. Untuk informasi selengkapnya, lihat Mode ketat.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk