Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede .NET SDK'sının yeni özellikleri ve .NET 8 araçları açıklanmaktadır.
SDK
Bu bölüm aşağıdaki alt konuları içerir:
- CLI tabanlı proje değerlendirmesi
- Terminal derleme çıktısı
- Basitleştirilmiş çıkış yolları
- 'dotnet workload clean' komutu
- 'dotnet publish' ve 'dotnet pack' varlıkları
-
dotnet restoregüvenlik denetimi - Şablon altyapısı
- Kaynak Bağlantı
- Kaynak derleme SDK'sı
CLI tabanlı proje değerlendirmesi
MSBuild, MSBuild'den betiklerinize veya araçlarınıza veri eklemenizi kolaylaştıran yeni bir özellik içerir. AŞAĞıDAKI yeni bayraklar, CI işlem hatlarında ve başka bir yerde kullanılmak üzere verileri almak üzere dotnet publish gibi CLI komutlarında kullanılabilir.
| Flag | Description |
|---|---|
--getProperty:<PROPERTYNAME> |
Belirtilen ada sahip MSBuild özelliğini getirir. |
--getItem:<ITEMTYPE> |
Belirtilen türdeki MSBuild öğelerini alır. |
--getTargetResult:<TARGETNAME> |
Belirtilen hedefi çalıştırmanın sonuçlarını alır. |
Değerler standart çıkışa yazılır. Aşağıdaki örneklerde gösterildiği gibi birden çok veya karmaşık değerler JSON olarak çıktı.
>dotnet publish --getProperty:OutputPath
bin\Release\net8.0\
>dotnet publish -p PublishProfile=DefaultContainer --getProperty:GeneratedContainerDigest --getProperty:GeneratedContainerConfiguration
{
"Properties": {
"GeneratedContainerDigest": "sha256:ef880a503bbabcb84bbb6a1aa9b41b36dc1ba08352e7cd91c0993646675174c4",
"GeneratedContainerConfiguration": "{\u0022config\u0022:{\u0022ExposedPorts\u0022:{\u00228080/tcp\u0022:{}},\u0022Labels\u0022...}}"
}
}
>dotnet publish -p PublishProfile=DefaultContainer --getItem:ContainerImageTags
{
"Items": {
"ContainerImageTags": [
{
"Identity": "latest",
...
]
}
}
Terminal derleme çıktısı
dotnet build daha modernleştirilmiş derleme çıkışı oluşturmak için yeni bir seçeneğe sahiptir. Bu Terminal Kaydedici çıktısı, hataları geldikleri projeye göre gruplandırır, çok hedefli projeler için farklı hedef framework'leri daha iyi ayırt eder ve derleme işleminin ne yaptığı hakkında gerçek zamanlı bilgi sağlar. Yeni çıktıya katılmak için --tl seçeneğini kullanın. Bu seçenek hakkında daha fazla bilgi için dotnet build seçenekleri bölümüne bakın.
Basitleştirilmiş çıkış yolları
.NET 8, derleme çıkışları için çıkış yolunu ve klasör yapısını basitleştirmeye yönelik bir seçenek sağlar. Daha önce .NET uygulamaları, farklı derleme yapıtları için derin ve karmaşık bir çıkış yolları kümesi üretmişti. Yeni, basitleştirilmiş çıkış yolu yapısı, tüm derleme çıkışlarını ortak bir konumda toplar ve bu da araçların tahmin etmelerini kolaylaştırır.
Daha fazla bilgi için bkz . Yapıt çıktı düzeni.
dotnet workload clean komut
.NET 8, birkaç .NET SDK veya Visual Studio güncelleştirmesi sonrasında kalmış olabilecek iş yükü paketlerini temizlemek için yeni bir komut sunar. İş yüklerini yönetirken sorunlarla karşılaşırsanız, yeniden denemeden önce workload clean kullanarak güvenli bir şekilde bilinen bir duruma geri yüklemeyi düşünün. Komutun iki modu vardır:
dotnet workload cleanDosya tabanlı veya MSI tabanlı iş yükleri için yetim kalmış paketleri temizleyen çöp toplama işlemini çalıştırır. Yalnız bırakılmış paketler, .NET SDK'sının kaldırılan sürümlerinden veya paketin yükleme kayıtlarının artık bulunmadığı paketlerdendir.
Visual Studio yüklüyse komut, Visual Studio'yu kullanarak el ile temizlemeniz gereken iş yüklerini de listeler.
dotnet workload clean --allBu mod daha agresiftir ve makinedeki geçerli SDK iş yükü yükleme türündeki (ve Visual Studio'dan olmayan) her paketi temizler. Ayrıca, çalışan .NET SDK özellik bandı ve altındaki tüm iş yükü yükleme kayıtlarını kaldırır.
dotnet publish ve dotnet pack varlıklar
dotnet publish ve dotnet pack komutları üretim varlıkları üretmeye yönelik olduğundan, artık varsayılan olarak Release varlıkları üretir.
Aşağıdaki çıktıda, dotnet build ve dotnet publish arasındaki farklı davranış gösterilmektedir ve PublishRelease özelliğini false olarak ayarlayarak, Debug varlıklarının yayınlama durumuna nasıl geri dönebileceğiniz açıklanmaktadır.
/app# dotnet new console
/app# dotnet build
app -> /app/bin/Debug/net8.0/app.dll
/app# dotnet publish
app -> /app/bin/Release/net8.0/app.dll
app -> /app/bin/Release/net8.0/publish/
/app# dotnet publish -p:PublishRelease=false
app -> /app/bin/Debug/net8.0/app.dll
app -> /app/bin/Debug/net8.0/publish/
Daha fazla bilgi için bkz. 'dotnet pack' Release config ve'dotnet publish' ise Release config kullanır.
dotnet restore güvenlik denetimi
.NET 8'den başlayarak, bağımlılık paketleri geri yüklendiğinde bilinen güvenlik açıklarına yönelik güvenlik denetimlerini kabul edebilirsiniz. Bu denetim, etkilenen paket adına, güvenlik açığının önem derecesine ve daha fazla ayrıntı için öneriye yönelik bir bağlantı içeren bir güvenlik açıkları raporu oluşturur.
dotnet add veya dotnet restore çalıştırdığınızda, bulunan tüm güvenlik açıkları için NU1901-NU1904 uyarıları belirecektir. Daha fazla bilgi için bkz. Güvenlik açıkları için denetim.
Şablon motoru
Şablon altyapısı, NuGet'in güvenlikle ilgili özelliklerinden bazılarını tümleştirerek .NET 8'de daha güvenli bir deneyim sağlar. Geliştirmeler şunlardır:
Paketlerin
http://beslemelerinden indirilmesini varsayılan olarak önleyin. Örneğin, kaynak URL HTTPS kullanmadığından aşağıdaki komut şablon paketini yükleyemiyor.dotnet new install console --add-source "http://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json"Bayrağını kullanarak bu sınırlamayı
--forcegeçersiz kılabilirsiniz.,
dotnet newdotnet new installvedotnet new updateiçin şablon paketindeki bilinen güvenlik açıklarını denetleyin. Güvenlik açıkları bulunursa ve devam etmek istiyorsanız bayrağını--forcekullanmanız gerekir.için
dotnet new, şablon paketi sahibi hakkında bilgi sağlayın. Sahiplik NuGet portalı tarafından doğrulanır ve güvenilir bir özellik olarak kabul edilebilir.dotnet searchvedotnet uninstalliçin, bir şablonun "güvenilir" bir paketten yüklenip yüklenmediğini, yani bir ayrılmış ön ek kullanıp kullanmadığını belirtin.
Kaynak Bağlantı
Kaynak Bağlantısı artık .NET SDK'sında yer alır. Hedef, Kaynak Bağlantı'yı SDK'ya aktararak paket için ayrı <PackageReference> bir işlem gerektirmek yerine varsayılan olarak daha fazla paketin bu bilgileri içermesidir. Bu bilgiler geliştiriciler için IDE deneyimini geliştirir.
Uyarı
Bu değişikliğin bir yan etkisi olarak, .NET 7 veya daha önceki bir sürümü hedefleyenler dahi, commit bilgileri derlenen kitaplıkların ve uygulamaların InformationalVersion değerine eklenir. Daha fazla bilgi için bkz. .NET SDK'sında bulunan Kaynak Bağlantısı.
Kaynak koddan derleme SDK'sı
Linux dağıtım tabanlı (kaynak derleme) SDK'sı artık kaynak derleme çalışma zamanı paketlerini kullanarak bağımsız uygulamalar oluşturma özelliğine sahiptir. Dağıtıma özgü çalışma zamanı paketi, kaynak derleme SDK'sı ile birlikte sunulur. Bağımsız dağıtım sırasında bu paketlenmiş çalışma zamanı paketine başvurulur ve böylece kullanıcılar için özellik etkinleştirilir.
Yerel AOT konsol uygulaması şablonu
Varsayılan konsol uygulaması şablonu, şimdi varsayılan olarak AOT desteğini içerir. AOT derlemesi için yapılandırılmış bir proje oluşturmak için komutunu çalıştırmanız dotnet new console --aotgerekir. tarafından --aot eklenen proje yapılandırmasının üç etkisi vardır:
- Projeyi yayımladığınızda, örneğin
dotnet publishveya Visual Studio kullanarak, Yerel AOT ile yerel bir kendi içinde yürütülebilir dosya oluşturur. - Kırpma, AOT ve tek dosya için uyumluluk çözümleyicilerini etkinleştirir. Bu çözümleyiciler, projenizin sorunlu olabilecek bölümleri (varsa) konusunda sizi uyarır.
- AOT derlemesi olmadan projenizde hata ayıkladığınızda AOT'ye benzer bir deneyim elde edebilmeniz için AOT'nin hata ayıklama zamanı öykünmesini etkinleştirir. Örneğin, AOT için açıklama eklenmemiş bir NuGet paketinde System.Reflection.Emit kullanıyorsanız ve bu nedenle uyumluluk çözümleyicisi tarafından gözden kaçırılmışsa, öykünme işlemi, projeyi AOT ile yayımlamaya çalıştığınızda herhangi bir sürprizle karşılaşmayacağınız anlamına gelir.
Linux üzerinde .NET
Linux için en düşük destek temelleri
Linux için en düşük destek taban çizgileri .NET 8 için güncelleştirildi. .NET, tüm mimariler için Ubuntu 16.04'ü hedefleyen bir yapıdır. Bu, .NET 8 için en düşük glibc sürümü tanımlamak için öncelikli olarak önemlidir. .NET 8, Ubuntu 14.04 veya Red Hat Enterprise Linux 7 gibi eski glibc içeren dağıtım sürümlerinde başlatılamaz.
Daha fazla bilgi için bkz. Red Hat Enterprise Linux Ailesi desteği.
Linux üzerinde kendi .NET'inizi oluşturma
Önceki .NET sürümlerinde kaynaktan .NET oluşturabilirsiniz, ancak bir sürüme karşılık gelen dotnet/installer depo işlemesinden bir "kaynak tarball" oluşturmanız gerekiyordu. .NET 8'de bu artık gerekli değildir ve doğrudan dotnet/dotnet deposundan Linux üzerinde .NET oluşturabilirsiniz. Bu depo .NET çalışma zamanları, araçları ve SDK'ları oluşturmak için dotnet/source-build kullanır. Bu, Red Hat ve Canonical'ın .NET oluşturmak için kullandığı derlemeyle aynıdır.
Kapsayıcı görüntüleri tüm gerekli bağımlılıkları içerdiğinden, kapsayıcı içinde dotnet-buildtools/prereqs derleme yapmak çoğu kişi için en kolay yaklaşımdır. Daha fazla bilgi için derleme yönergelerine bakın.
NuGet imza doğrulaması
.NET 8'den başlayarak NuGet, Linux'ta imzalı paketleri varsayılan olarak doğrular. NuGet, Windows'ta da imzalı paketleri doğrulamaya devam eder.
Kullanıcıların çoğu doğrulamayı fark etmemelidir. Bununla birlikte, /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem konumunda bulunan bir kök sertifika paketiniz varsa, nu3042 uyarısının eşlik ettiği güven hataları görebilirsiniz.
Ortam değişkenini DOTNET_NUGET_SIGNATURE_VERIFICATIONfalseolarak ayarlayarak doğrulamayı geri çevirebilirsiniz.
Kod analizi
.NET 8, .NET kitaplık API'lerini doğru ve verimli bir şekilde kullandığınızı doğrulamaya yardımcı olmak için birkaç yeni kod çözümleyicisi ve düzeltici içerir. Aşağıdaki tabloda yeni çözümleyiciler özetlenmiştir.
| Kural Kimliği | Kategori | Description |
|---|---|---|
| CA1856 | Performance | ConstantExpectedAttribute özniteliği bir parametreye doğru uygulanmadığında tetiklenir. |
| CA1857 | Performance | Bir parametre ConstantExpectedAttribute ile açıklandığında ancak sağlanan bağımsız değişken sabit olmadığında tetiklenir. |
| CA1858 | Performance | Dizenin belirli bir ön ek ile başlayıp başlamadığını belirlemek için çağırmak String.StartsWith , sonucu String.IndexOf sıfırla karşılaştırmaktan daha iyidir. |
| CA1859 | Performance | Bu kural, belirli yerel değişkenlerin, alanların, özelliklerin, yöntem parametrelerinin ve yöntem dönüş türlerinin arabirimden veya soyut türlerden mümkün olduğunda somut türlere yükseltilmesi önerilir. Somut türlerin kullanılması, daha kaliteli kod oluşturulmasına yol açar. |
| CA1860 | Performance | Bir koleksiyon türünün herhangi bir öğeye sahip olup olmadığını belirlemek için , Lengthveya Count öğesini çağırmaktan IsEmptyEnumerable.Anydaha iyidir. |
| CA1861 | Performance | Bağımsız değişken olarak geçirilen sabit diziler tekrar tekrar çağrıldığında yeniden kullanılmaz ve bu da her seferinde yeni bir dizi oluşturulduğu anlamına gelir. Performansı geliştirmek için diziyi statik salt okunur bir alana ayıklamayı göz önünde bulundurun. |
| CA1865-CA1867 | Performance | Karakter aşırı yüklemesi, tek karakterli bir dize için daha iyi performanslı bir aşırı yüklemedir. |
| CA2021 | Reliability | Enumerable.Cast<TResult>(IEnumerable) ve Enumerable.OfType<TResult>(IEnumerable) uyumlu türlerin düzgün çalışmasını gerektirir. Genel türlerde genişletme ve kullanıcı tanımlı dönüştürmeler desteklenmez. |
| CA1510-CA1513 | Bakım Kolaylığı | Atma yardımcıları, yeni bir özel durum örneği oluşturan bir if bloktan daha basit ve daha verimlidir. Bu dört çözümleyici aşağıdaki özel durumlar için oluşturulmuştur: ArgumentNullException, ArgumentExceptionve ArgumentOutOfRangeExceptionObjectDisposedException. |
Diagnostics
C# Sıcak Yeniden Yükleme, genel türlerin değiştirilmesini destekler
.NET 8'den başlayarak C# Sık Erişimli Yeniden Yükleme , genel türlerin ve genel yöntemlerin değiştirilmesini destekler. Visual Studio ile konsol, masaüstü, mobil veya WebAssembly uygulamalarında hata ayıkladığınızda, C# kodunda veya Razor sayfalarında genel sınıflara ve genel yöntemlere değişiklik uygulayabilirsiniz. Daha fazla bilgi için Roslyn tarafından desteklenen düzenlemelerin tam listesine bakın.