Perubahan signifikan di .NET Core 2.1

Jika Anda bermigrasi ke .NET Core versi 2.1, perubahan melanggar yang tercantum dalam artikel ini dapat memengaruhi aplikasi Anda.

Pustaka Utama .NET

API Jalur tidak menghasilkan pengecualian untuk karakter yang tidak valid

API yang melibatkan jalur file tidak lagi memvalidasi karakter jalur atau melempar ArgumentException jika karakter yang tidak valid ditemukan.

Ubah deskripsi

Di .NET Framework dan .NET Core 1.0 - 2.0, metode yang tercantum di bagian API yang Terpengaruh melemparkan ArgumentException jika argumen jalur berisi karakter jalur yang tidak valid. Mulai dari .NET Core 2.1, metode ini tidak lagi memeriksa karakter jalur yang tidak valid atau melempar pengecualian jika karakter yang tidak valid ditemukan.

Alasan perubahan

Validasi agresif terhadap karakter jalur memblokir beberapa skenario lintas platform. Perubahan ini diperkenalkan sehingga .NET tidak mencoba mereplikasi atau memprediksi hasil panggilan API sistem operasi. Untuk informasi selengkapnya, lihat posting blog tinjauan awal System.IO di .NET Core 2.1.

Versi yang diperkenalkan

.NET Core 2.1

Jika kode Anda mengandalkan API ini untuk memeriksa karakter yang tidak valid, Anda dapat menambahkan panggilan ke Path.GetInvalidPathChars.

API yang terpengaruh

Lihat juga


Bidang privat ditambahkan ke jenis struct bawaan

Bidang privat ditambahkan ke jenis struktur tertentu dalam rakitan referensi. Akibatnya, dalam C#, jenis struct tersebut harus selalu dibuat dengan menggunakan operator baru atau literal default.

Ubah deskripsi

Dalam .NET Core 2.0 dan versi sebelumnya, beberapa jenis struct yang disediakan, misalnya, ConsoleKeyInfo, dapat dibuat tanpa menggunakan new operator atau literal default di C#. Ini karena rakitan referensi yang digunakan oleh pengkompilasi C# tidak berisi bidang privat untuk struktur. Semua bidang privat untuk jenis struct .NET ditambahkan ke rakitan referensi mulai dari .NET Core 2.1.

Misalnya, kode C# berikut dikompilasi di .NET Core 2.0, tetapi tidak dalam .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

Di .NET Core 2.1, kode sebelumnya menghasilkan kesalahan kompilator berikut: CS0165 - Penggunaan variabel lokal 'kunci' yang tidak ditetapkan

Versi yang diperkenalkan

2.1

Buat instans jenis struct dengan menggunakan new operator atau literal default.

Contohnya:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");

Kategori

Pustaka Utama .NET

API yang terpengaruh


Versi OpenSSL di macOS

Runtime .NET Core 3.0 dan yang lebih baru di macOS sekarang lebih memilih versi OpenSSL 1.1.x dibandingkan versi OpenSSL 1.0.x untuk jenis AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl, dan SafeEvpPKeyHandle.

Runtime .NET Core 2.1 sekarang mendukung versi OpenSSL 1.1.x, tetapi masih lebih suka versi OpenSSL 1.0.x.

Ubah deskripsi

Sebelumnya, runtime .NET Core menggunakan versi OpenSSL 1.0.x di macOS untuk jenis yang berinteraksi dengan OpenSSL. Versi OpenSSL 1.0.x terbaru, OpenSSL 1.0.2, sekarang tidak didukung. Untuk menyimpan jenis yang menggunakan OpenSSL pada versi OpenSSL yang didukung, runtime .NET Core 3.0 dan yang lebih baru sekarang menggunakan versi OpenSSL yang lebih baru di macOS.

Dengan perubahan ini, perilaku untuk runtime .NET Core di macOS adalah sebagai berikut:

  • Versi runtime .NET Core 3.0 dan yang lebih baru menggunakan OpenSSL 1.1.x, apabila tersedia, dan menggunakan OpenSSL 1.0.x sebagai alternatif hanya jika tidak ada versi 1.1.x yang tersedia.

    Untuk pemanggil yang menggunakan tipe interop OpenSSL dengan kustom P/Invokes, ikuti panduan dalam bagian keterangan di SafeEvpPKeyHandle.OpenSslVersion. Aplikasi Anda mungkin mengalami crash jika Anda tidak memeriksa nilainya OpenSslVersion .

  • Runtime .NET Core 2.1 menggunakan OpenSSL 1.0.x, jika tersedia, dan kembali ke OpenSSL 1.1.x jika tidak ada versi 1.0.x yang tersedia.

    Runtime 2.1 memilih versi OpenSSL yang lebih lama karena properti SafeEvpPKeyHandle.OpenSslVersion tidak ada di .NET Core 2.1, sehingga versi OpenSSL tidak dapat ditentukan secara andal saat runtime.

Versi yang diperkenalkan

  • .NET Core 2.1.16
  • .NET Core 3.0.3
  • .NET Core 3.1.2

Kategori

Pustaka Utama .NET

API yang terpengaruh


MSBuild

Alat proyek sekarang disertakan dalam SDK

.NET Core 2.1 SDK sekarang menyertakan alat CLI umum, dan Anda tidak perlu lagi mereferensikan alat ini dari proyek.

Ubah deskripsi

Di .NET Core 2.0, proyek mereferensikan alat .NET eksternal dengan <DotNetCliToolReference> pengaturan proyek. Di .NET Core 2.1, beberapa alat ini disertakan dengan .NET Core SDK, dan pengaturan tidak lagi diperlukan. Jika Anda menyertakan referensi ke alat ini dalam proyek, Anda akan menerima kesalahan yang mirip dengan yang berikut ini: Alat 'Microsoft.EntityFrameworkCore.Tools.DotNet' sekarang disertakan dalam .NET Core SDK.

Alat yang sekarang disertakan dalam .NET Core 2.1 SDK:

<Nilai DotNetCliToolReference> Alat
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Versi yang diperkenalkan

.NET Core SDK 2.1.300

Hapus pengaturan <DotNetCliToolReference> dari proyek Anda.

Kategori

MSBuild

API yang terpengaruh

Tidak tersedia


Lihat juga