.NET Core 2.1’deki yenilikler
.NET Core 2.1 aşağıdaki alanlarda iyileştirmeler ve yeni özellikler içerir:
- Takım
- İleriye doğru gitme
- Dağıtım
- Windows Uyumluluk Paketi
- JIT derleme geliştirmeleri
- API değişiklikleri
Araçlar
.NET Core 2.1 ile birlikte gelen .NET Core 2.1 SDK 'sı (v 2.1.300), aşağıdaki değişiklikleri ve geliştirmeleri içerir:
Derleme performansı geliştirmeleri
.NET Core 2.1'in önemli bir odağı, özellikle artımlı derlemeler için derleme zamanı performansını geliştirmektir. Bu performans geliştirmeleri, visual studio'daki ve kullanan komut satırı derlemeleri dotnet build
için geçerlidir. Geliştirmenin bazı bireysel alanları şunlardır:
Paket varlık çözümlemesi için, tüm varlıklar yerine yalnızca derleme tarafından kullanılan varlıkları çözümleme.
Derleme başvurularının önbelleğe alınmasını sağlar.
Tek tek
dotnet build
çağrılara yayılan işlemler olan uzun süre çalışan SDK derleme sunucularının kullanımı. Her çalıştırıldığındadotnet build
büyük kod bloklarını JIT derleme gereksinimini ortadan kaldırır. Derleme sunucusu işlemleri aşağıdaki komutla otomatik olarak sonlandırılabilir:dotnet buildserver shutdown
Yeni CLI komutları
Kullanılarak yalnızca proje başına DotnetCliToolReference
kullanılabilen bir dizi araç artık .NET Core SDK'sının bir parçası olarak kullanılabilir. Bu araçlar şunları içerir:
dotnet watch
, belirlenen komut kümesini yürütmeden önce dosyanın değişmesini bekleyen bir dosya sistemi izleyicisi sağlar. Örneğin, aşağıdaki komut geçerli projeyi otomatik olarak yeniden oluşturur ve içindeki bir dosya değiştiğinde ayrıntılı çıkış oluşturur:dotnet watch -- --verbose build
Seçeneğin
--
önüne gelen seçeneği not edin--verbose
. Altdotnet
işleme geçirilen bağımsız değişkenlerden doğrudandotnet watch
komuta geçirilen seçenekleri sınırlandırıyor. Bu seçenek olmadan,--verbose
komut için değildotnet build
, komut içindotnet watch
geçerlidir.Daha fazla bilgi için bkz . dotnet watch kullanarak ASP.NET Core uygulamaları geliştirme.
dotnet dev-certs
ASP.NET Core uygulamalarında geliştirme sırasında kullanılan sertifikaları oluşturur ve yönetir.dotnet user-secrets
ASP.NET Core uygulamalarındaki bir kullanıcı gizli dizi deposundaki gizli dizileri yönetir.dotnet sql-cache
, dağıtılmış önbelleğe alma için kullanılacak bir Microsoft SQL Server veritabanında tablo ve dizinler oluşturur.dotnet ef
Entity Framework Core uygulamalarında veritabanlarını, DbContext nesneleri ve geçişleri yönetmeye yönelik bir araçtır. Daha fazla bilgi için bkz . EF Core .NET Komut Satırı Araçları.
Genel Araçlar
.NET Core 2.1, genel olarak komut satırından kullanılabilen özel araçlar olan Genel Araçları destekler. .NET Core'un önceki sürümlerindeki genişletilebilirlik modeli, özel araçları yalnızca kullanarak DotnetCliToolReference
proje başına kullanılabilir hale getirdi.
Genel Araç yüklemek için dotnet tool install komutunu kullanırsınız. Örneğin:
dotnet tool install -g dotnetsay
Yüklendikten sonra araç, araç adı belirtilerek komut satırından çalıştırılabilir. Daha fazla bilgi için bkz . .NET Core Genel Araçlarına genel bakış.
komutuyla dotnet tool
araç yönetimi
.NET Core 2.1 SDK'sında tüm araç işlemleri komutunu kullanır dotnet tool
. Aşağıdaki seçenekler bulunur:
dotnet tool install
ögesini seçin.dotnet tool update
bir aracı kaldırmak ve yeniden yüklemek için etkin bir şekilde güncelleştirir.dotnet tool list
şu anda yüklü olan araçları listelemek için.dotnet tool uninstall
şu anda yüklü olan araçları kaldırmak için.
İleriye doğru gitme
.NET Core 2.0 ile başlayan tüm .NET Core uygulamaları, bir sistemde yüklü olan en son ikincil sürüme otomatik olarak iletilir.
.NET Core 2.0'dan başlayarak, bir uygulamanın oluşturulduğu .NET Core sürümü çalışma zamanında mevcut değilse, uygulama otomatik olarak en son yüklenen .NET Core ikincil sürümüne karşı çalışır. Başka bir deyişle, bir uygulama .NET Core 2.0 ile oluşturulmuşsa ve .NET Core 2.0 konak sisteminde mevcut değilse ancak .NET Core 2.1 ise, uygulama .NET Core 2.1 ile çalışır.
Önemli
Bu ileri sarma davranışı önizleme sürümleri için geçerli değildir. Varsayılan olarak, büyük sürümler için de geçerli değildir, ancak bu, aşağıdaki ayarlarla değiştirilebilir.
Hiçbir aday paylaşılan çerçevesi üzerinde ileri sarma ayarını değiştirerek bu davranışı değiştirebilirsiniz. Kullanılabilir ayarlar şunlardır:
0
- İkincil sürüm ileri sarma davranışını devre dışı bırakın. Bu ayarla, .NET Core 2.0.0 için oluşturulan bir uygulama .NET Core 2.0.1'e iletilecek ancak .NET Core 2.2.0 veya .NET Core 3.0.0'a sunulmayacaktır.1
- alt sürüm ileri sarma davranışını etkinleştirin. Bu ayar için varsayılan değerdir. Bu ayarla, .NET Core 2.0.0 için oluşturulan bir uygulama, hangisinin yüklü olduğuna bağlı olarak .NET Core 2.0.1 veya .NET Core 2.2.0'a iletilir, ancak .NET Core 3.0.0'a iletılmaz.2
- ikincil ve ana sürüm ileri sarma davranışını etkinleştirin. Ayarlanırsa, farklı ana sürümler bile dikkate alınır, bu nedenle .NET Core 2.0.0 için oluşturulan bir uygulama .NET Core 3.0.0'a iletilir.
Bu ayarı üç yoldan herhangi biriyle değiştirebilirsiniz:
Ortam değişkenini
DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX
istenen değere ayarlayın.İstenen değeri içeren aşağıdaki satırı .runtimeconfig.json dosyasına ekleyin:
"rollForwardOnNoCandidateFx" : 0
.NET CLI kullanırken, aşağıdaki seçeneği istenen değerle birlikte gibi
run
bir .NET komutuna ekleyin:dotnet run --rollForwardOnNoCandidateFx=0
Düzeltme eki sürümü ileri sarma bu ayardan bağımsızdır ve olası ikincil veya ana sürüm ileri sarma uygulandıktan sonra gerçekleştirilir.
Dağıtım
Bağımsız uygulama bakımı
dotnet publish
artık hizmetli çalışma zamanı sürümüne sahip bağımsız uygulamalar yayımlıyor. .NET Core 2.1 SDK'sı (v 2.1.300) ile bağımsız bir uygulama yayımladığınızda, uygulamanız bu SDK tarafından bilinen en son hizmet sunulan çalışma zamanı sürümünü içerir. En son SDK'ya yükselttiğiniz zaman en son .NET Core çalışma zamanı sürümüyle yayımlarsınız. Bu, .NET Core 1.0 ve üzeri çalışma zamanları için geçerlidir.
Bağımsız yayımlama, NuGet.org çalışma zamanı sürümlerine dayanır. Makinenizde hizmet çalışma zamanına sahip olmanız gerekmez.
.NET Core 2.0 SDK'sı kullanılarak, özelliği aracılığıyla RuntimeFrameworkVersion
farklı bir sürüm belirtilmediği sürece bağımsız uygulamalar .NET Core 2.0.0 çalışma zamanıyla yayımlanır. Bu yeni davranışla, bu özelliği artık bağımsız bir uygulama için daha yüksek bir çalışma zamanı sürümü seçmek üzere ayarlamanız gerekmez. Bundan sonra en kolay yaklaşım her zaman .NET Core 2.1 SDK (v 2.1.300) ile yayımlamaktır.
Daha fazla bilgi için bkz . Bağımsız dağıtım çalışma zamanı ileri sarma.
Windows Uyumluluk Paketi
Var olan kodu .NET Framework'ten .NET Core'a taşımanız, Windows Uyumluluk Paketi'ni kullanabilirsiniz. .NET Core'da sağlanandan 20.000 api'ye daha fazla erişim sağlar. Bu API'ler ad alanı, sınıf, WMI, EventLog Performans Sayaçları, Windows Hizmetleri ve Windows kayıt defteri türleri ile üyelerindeki türleri System.Drawing içerir.
JIT derleyicisi geliştirmeleri
.NET Core, performansı önemli ölçüde geliştirebilen katmanlı derleme (uyarlamalı iyileştirme olarak da bilinir) adlı yeni bir JIT derleyici teknolojisi içerir. Katmanlı derleme bir kabul etme ayarıdır.
JIT derleyicisi tarafından gerçekleştirilen önemli görevlerden biri kod yürütmeyi iyileştirmektir. Ancak az kullanılan kod yolları için derleyici, çalışma zamanının iyileştirilmemiş kod çalıştırmaya harcadığından daha fazla zaman harcayabilir. Katmanlı derleme, JIT derlemesinde iki aşamayı tanıtır:
İlk katman, mümkün olan en hızlı şekilde kod oluşturur.
Sık yürütülen yöntemler için iyileştirilmiş kod oluşturan ikinci katman. Derlemenin ikinci katmanı, gelişmiş performans için paralel olarak gerçekleştirilir.
Katmanlı derlemeyi iki yoldan biriyle kabul edebilirsiniz.
.NET Core 2.1 SDK'sını kullanan tüm projelerde katmanlı derleme kullanmak için aşağıdaki ortam değişkenini ayarlayın:
COMPlus_TieredCompilation="1"
Katmanlı derlemeyi proje bazında kullanmak için
<PropertyGroup>
, aşağıdaki örnekte gösterildiği gibi özelliğini MSBuild proje dosyasının bölümüne ekleyin<TieredCompilation>
:<PropertyGroup> <!-- other property definitions --> <TieredCompilation>true</TieredCompilation> </PropertyGroup>
API değişiklikleri
Span<T>
ve Memory<T>
.NET Core 2.1, dizilerle ve diğer bellek türleriyle çalışmayı çok daha verimli hale getiren bazı yeni türler içerir. Yeni türler şunlardır:
Bu türler olmadan, dizinin bir bölümü veya bellek arabelleğinin bir bölümü gibi öğeleri geçirirken, bir yönteme geçirmeden önce verilerin bir kısmının kopyasını oluşturmanız gerekir. Bu türler, ek bellek ayırma ve kopyalama işlemleri gereksinimini ortadan kaldıran bu verilerin sanal bir görünümünü sağlar.
Aşağıdaki örnek, bir Span<T> Memory<T> dizinin 10 öğesinin sanal görünümünü sağlamak için ve örneğini kullanır.
using System;
class Program
{
static void Main()
{
int[] numbers = new int[100];
for (int i = 0; i < 100; i++)
{
numbers[i] = i * 2;
}
var part = new Span<int>(numbers, start: 10, length: 10);
foreach (var value in part)
Console.Write($"{value} ");
}
}
// The example displays the following output:
// 20 22 24 26 28 30 32 34 36 38
Module Program
Sub Main()
Dim numbers As Integer() = New Integer(99) {}
For i As Integer = 0 To 99
numbers(i) = i * 2
Next
Dim part = New Memory(Of Integer)(numbers, start:=10, length:=10)
For Each value In part.Span
Console.Write($"{value} ")
Next
End Sub
End Module
' The example displays the following output:
' 20 22 24 26 28 30 32 34 36 38
Brotli sıkıştırma
.NET Core 2.1, Brotli sıkıştırma ve sıkıştırmayı açma desteği ekler. Brotli, RFC 7932'de tanımlanan ve çoğu web tarayıcısı ve ana web sunucusu tarafından desteklenen genel amaçlı kayıpsız sıkıştırma algoritmasıdır. Akış tabanlı System.IO.Compression.BrotliStream sınıfı veya yüksek performanslı span tabanlı System.IO.Compression.BrotliEncoder ve System.IO.Compression.BrotliDecoder sınıflarını kullanabilirsiniz. Aşağıdaki örnekte sınıfıyla sıkıştırma gösterilmektedir BrotliStream :
public static Stream DecompressWithBrotli(Stream toDecompress)
{
MemoryStream decompressedStream = new MemoryStream();
using (BrotliStream decompressionStream = new BrotliStream(toDecompress, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedStream);
}
decompressedStream.Position = 0;
return decompressedStream;
}
Public Function DecompressWithBrotli(toDecompress As Stream) As Stream
Dim decompressedStream As New MemoryStream()
Using decompressionStream As New BrotliStream(toDecompress, CompressionMode.Decompress)
decompressionStream.CopyTo(decompressedStream)
End Using
decompressedStream.Position = 0
Return decompressedStream
End Function
Davranış BrotliStream ve GZipStreamile DeflateStream aynıdır ve bu da bu API'leri çağıran kodu 'a dönüştürmeyi BrotliStreamkolaylaştırır.
Yeni şifreleme API'leri ve şifreleme geliştirmeleri
.NET Core 2.1, şifreleme API'lerinde çok sayıda geliştirme içerir:
System.Security.Cryptography.Pkcs.SignedCms , System.Security.Cryptography.Pkcs paketinde kullanılabilir. Uygulama, .NET Framework'teki sınıfıyla aynıdır SignedCms .
ve X509Certificate.GetCertHashString yöntemlerinin X509Certificate.GetCertHash yeni aşırı yüklemeleri, çağıranların SHA-1 dışındaki algoritmaları kullanarak sertifika parmak izi değerlerini almasını sağlamak için bir karma algoritma tanımlayıcısı kabul eder.
Karma oluşturma, HMAC, şifreleme rastgele sayı oluşturma, asimetrik imza oluşturma, asimetrik imza işleme ve RSA şifrelemesi için yeni Span<T>tabanlı şifreleme API'leri kullanılabilir.
tabanlı bir Span<T>uygulama kullanılarak performansı System.Security.Cryptography.Rfc2898DeriveBytes yaklaşık %15 oranında iyileştirildi.
Yeni System.Security.Cryptography.CryptographicOperations sınıf iki yeni yöntem içerir:
FixedTimeEquals aynı uzunluktaki iki girişin döndürülmesi sabit bir süre alır ve bu da yan kanal bilgilerinin zamanlanmasına katkıda bulunmamak için şifreleme doğrulamasında kullanıma uygun olmasını sağlar.
ZeroMemory , en iyi duruma getirilemeyen bir bellek temizleme yordamıdır.
Statik RandomNumberGenerator.Fill yöntem, rastgele Span<T> değerlerle doldurur.
System.Security.Cryptography.Pkcs.EnvelopedCms artık Linux ve macOS'ta desteklenmektedir.
Elliptic-Curve Diffie-Hellman (ECDH) artık sınıf ailesinde System.Security.Cryptography.ECDiffieHellman kullanılabilir. Yüzey alanı .NET Framework ile aynıdır.
tarafından RSA.Create döndürülen örnek, SHA-2 özeti kullanarak OAEP ile şifreleyebilir veya şifresini çözebilir, ayrıca RSA-PSS kullanarak imza oluşturabilir veya doğrulayabilir.
Yuva geliştirmeleri
.NET Core, System.Net.Http.SocketsHttpHandlerdaha üst düzey ağ API'lerinin temelini oluşturan yeni bir tür ve yeniden yazılmış System.Net.Http.HttpMessageHandlerbir içerir. System.Net.Http.SocketsHttpHandlerörneğin, uygulamanın temelidir HttpClient . .NET Core'un önceki sürümlerinde, üst düzey API'ler yerel ağ uygulamalarını temel alıyorlardı.
.NET Core 2.1'de kullanıma sunulan yuva uygulamasının bir dizi avantajı vardır:
Önceki uygulamayla karşılaştırıldığında önemli bir performans artışı.
Dağıtım ve bakımı basitleştiren platform bağımlılıklarının ortadan kaldırılması.
Tüm .NET Core platformları genelinde tutarlı davranış.
SocketsHttpHandler , .NET Core 2.1'deki varsayılan uygulamadır. Ancak yöntemini çağırarak AppContext.SetSwitch uygulamanızı eski HttpClientHandler sınıfı kullanacak şekilde yapılandırabilirsiniz:
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", False)
Ayrıca, tabanlı SocketsHttpHandleryuva uygulamalarını kullanmayı geri çevirmek için bir ortam değişkeni de kullanabilirsiniz. Bunu yapmak için veya 0 olarak ayarlayın DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER
false
.
Windows'da, yerel bir uygulamaya SocketsHttpHandler dayalı olan veya sınıfının örneğini oluşturucuya HttpClient geçirerek sınıfını kullanmayı System.Net.Http.WinHttpHandlerda seçebilirsiniz.
Linux ve macOS'ta yalnızca işlem başına yapılandırabilirsiniz HttpClient . Linux'ta, eski HttpClient uygulamayı kullanmak istiyorsanız libcurl dağıtmanız gerekir. (.NET Core 2.0 ile yüklenir.)
Hataya neden olan değişiklikler
Hataya neden olan değişiklikler hakkında bilgi için bkz . Sürüm 2.0'dan 2.1'e geçiş için hataya neden olan değişiklikler.