Aracılığıyla paylaş


SDK'daki yenilikler ve .NET 8 için araçlar

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

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 clean

    Dosya 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 --all

    Bu 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ı --force geçersiz kılabilirsiniz.

  • , dotnet newdotnet new installve dotnet new updateiçin şablon paketindeki bilinen güvenlik açıklarını denetleyin. Güvenlik açıkları bulunursa ve devam etmek istiyorsanız bayrağını --force kullanmanı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 search ve dotnet uninstall iç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ı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 publish veya 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.

Ayrıca bakınız