İngilizce dilinde oku

Aracılığıyla paylaş


.NET Core 2.1'de hataya neden olan değişiklikler

.NET Core'un 2.1 sürümüne geçiriyorsanız, bu makalede listelenen hataya neden olan değişiklikler uygulamanızı etkileyebilir.

Core .NET kitaplıkları

Yol API'leri geçersiz karakterler için özel durum oluşturmaz

Dosya yollarını içeren API'ler artık yol karakterlerini doğrulamaz veya geçersiz bir karakter bulunursa bir ArgumentException oluşturmaz.

Açıklama değiştirildi

.NET Framework ve .NET Core 1.0 - 2.0'da, Etkilenen API'ler bölümünde listelenen yöntemler yol bağımsız değişkeni geçersiz bir ArgumentException yol karakteri içeriyorsa bir oluşturur. .NET Core 2.1'den başlayarak, bu yöntemler artık geçersiz yol karakterlerini denetlemez veya geçersiz bir karakter bulunursa bir özel durum oluşturmaz.

Değişiklik nedeni

Yol karakterlerinin agresif bir şekilde doğrulanması bazı platformlar arası senaryoları engeller. Bu değişiklik, .NET'in işletim sistemi API çağrılarının sonucunu çoğaltmaya veya tahmin etmeye çalışmaması için sunulmuştur. Daha fazla bilgi için .NET Core 2.1'deki System.IO göz atma blog gönderisine bakın.

Sürüm kullanıma sunulmuştur

.NET Core 2.1

Kodunuz geçersiz karakterleri denetlemek için bu API'lere bağlıysa, öğesine Path.GetInvalidPathCharsbir çağrı ekleyebilirsiniz.

Etkilenen API’ler

Ayrıca bkz.


Yerleşik yapı türlerine eklenen özel alanlar

Başvuru derlemelerindeki belirli yapı türlerine özel alanlar eklendi. Sonuç olarak, C# dilinde bu yapı türleri her zaman yeni işleç veya varsayılan değişmez değer kullanılarak örneklenmelidir.

Açıklama değiştirildi

.NET Core 2.0 ve önceki sürümlerde, sağlanan bazı yapı türleri, örneğin, ConsoleKeyInfoC# içinde işleç veya varsayılan değişmez değer kullanılmadan new örneklenebilir. Bunun nedeni C# derleyicisi tarafından kullanılan başvuru derlemelerinin yapıların özel alanlarını içermemiş olmasıydı. .NET yapı türleri için tüm özel alanlar .NET Core 2.1'den başlayarak başvuru derlemelerine eklenir.

Örneğin, aşağıdaki C# kodu .NET Core 2.0'da derlenmiş ancak .NET Core 2.1'de derlenmemektedir:

ConsoleKeyInfo key;    // Struct type

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

.NET Core 2.1'de, önceki kod şu derleyici hatasıyla sonuçlanır: CS0165 - Atanmamış yerel değişken 'key' kullanımı

Sürüm kullanıma sunulmuştur

2.1

Önerilen eylem

işlecini veya varsayılan değişmez değeri kullanarak yapı türlerinin new örneğini oluşturma.

Örneğin:

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

Core .NET kitaplıkları

Etkilenen API’ler


macOS'ta OpenSSL sürümleri

macOS üzerindeki .NET Core 3.0 ve üzeri çalışma zamanları artık , ve türleri için OpenSSL 1.0.x sürümlerine AesCcmECDiffieHellmanOpenSslDSAOpenSslECDsaOpenSslAesGcmRSAOpenSslOpenSSL 1.1.x sürümlerini tercih ediyor.SafeEvpPKeyHandle

.NET Core 2.1 çalışma zamanı artık OpenSSL 1.1.x sürümlerini destekliyor, ancak yine de OpenSSL 1.0.x sürümlerini tercih ediyor.

Açıklama değiştirildi

Daha önce .NET Core çalışma zamanı, OpenSSL ile etkileşim kuran türler için macOS üzerinde OpenSSL 1.0.x sürümlerini kullanıyordu. En son OpenSSL 1.0.x sürümü olan OpenSSL 1.0.2 artık destekten çıktı. OpenSSL'in desteklenen sürümlerinde OpenSSL kullanan türleri korumak için .NET Core 3.0 ve üzeri çalışma zamanları artık macOS üzerinde OpenSSL'nin daha yeni sürümlerini kullanıyor.

Bu değişiklikle, macOS'ta .NET Core çalışma zamanlarının davranışı aşağıdaki gibidir:

  • .NET Core 3.0 ve sonraki sürüm çalışma zamanları, varsa OpenSSL 1.1.x kullanır ve yalnızca 1.1.x sürümü yoksa OpenSSL 1.0.x sürümüne geri döner.

    OpenSSL birlikte çalışma türlerini özel P/Invoke'larla kullanan arayanlar için, açıklamalardaki SafeEvpPKeyHandle.OpenSslVersion yönergeleri izleyin. Değeri denetlemezseniz OpenSslVersion uygulamanız kilitlenebilir.

  • .NET Core 2.1 çalışma zamanı, varsa OpenSSL 1.0.x kullanır ve 1.0.x sürümü yoksa OpenSSL 1.1.x sürümüne geri döner.

    Özelliği .NET Core 2.1'de olmadığından 2.1 çalışma zamanı OpenSSL'nin SafeEvpPKeyHandle.OpenSslVersion önceki sürümünü tercih eder, bu nedenle OpenSSL sürümü çalışma zamanında güvenilir bir şekilde belirlenemez.

Sürüm kullanıma sunulmuştur

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

Önerilen eylem

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


MSBuild

Proje araçları artık SDK'ya dahil edilmiştir

.NET Core 2.1 SDK'sı artık ortak CLI araçlarını içerir ve artık bu araçlara projeden başvurmanız gerekmez.

Açıklama değiştirildi

.NET Core 2.0'da projeler, proje ayarıyla dış .NET araçlarına <DotNetCliToolReference> başvurur. .NET Core 2.1'de, bu araçlardan bazıları .NET Core SDK'sı ile birlikte sunulur ve bu ayar artık gerekli değildir. Projenize bu araçlara başvurular eklerseniz, aşağıdakine benzer bir hata alırsınız: 'Microsoft.EntityFrameworkCore.Tools.DotNet' aracı artık .NET Core SDK'sına dahil edilmiştir.

Araçlar artık .NET Core 2.1 SDK'sında yer alıyor:

<DotNetCliToolReference> değeri Araç
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

Sürüm kullanıma sunulmuştur

.NET Core SDK 2.1.300

Önerilen eylem

<DotNetCliToolReference> Ayarı projenizden kaldırın.

Kategori

MSBuild

Etkilenen API’ler

Yok


Ayrıca bkz.