.NET 8 Preview 4 Features
In this article, we’re going to delve into the latest updates and enhancements introduced in .NET 8 Preview 4. Microsoft has been hard at work, refining and expanding the capabilities of the .NET ecosystem, and this preview release is no exception.
We’ll be exploring the key features, such as improvements to System.Text.Json, code generation optimizations, and support for unspeakable types.
Let’s check what’s new in .NET 8 Preview 4!
A Fresh Take on MSBuild Output
Ever struggled with MSBuild output? Parsing that wall of text can be a nightmare, right? Well, Microsoft heard you and now we’ve got the Terminal Logger! This modernized MSBuild output logging is here to make your life easier. It’s designed to:
- Organize errors logically by project
- Display projects and builds in a user-friendly way (especially for multi-framework projects)
- Differentiate various
TargetFrameworksof a project
- Provide a complete overview of the project’s outputs
- Keep you updated on the build progress
To enable the new output, use the
/tl flag along with options like
off. With this logger turned on, you’ll see different phases (e.g., restoration and construction) and built projects with MSBuild targets and timings. This extra info helps you understand the build process and where to start exploring further.
As projects get built, a new “build completed” section will appear, showing:
- Project name
- Target Framework
- Main compilation output
- Compilation diagnostics
Now, both the project and any errors stand out, making it easier to spot issues.
SDK: Tweaked Simplified Output Path
Remember the Preview 3 simplified output path? Microsoft took your feedback onboard, and now we have some updates:
- Default path changed from
- Project file usage no longer supported
- Easier activation with
Why these changes? Most users wanted better visibility on Unix-based systems, so the
. was dropped from the folder name. Also, using
artifacts as the root path resolved .gitignore support and .NET SDK file globbing issues.
To try this updated feature, simply run
dotnet new buildprops --use-artifacts and you’re good to go!
Template Engine: Boosted Security with NuGet.org Packages
There is now a new security measure in the dotnet template engine. What’s new? Here’s what’s new:
http:\\feed package downloads (override with
- Warning users about template package vulnerabilities
- Adding info on NuGet.org prefix reserved templates
- Template package owner information
NuGet: Package Signing Verification on Linux, Anyone?
Hey C# devs, guess what? Now, NuGet will start to verify signed packages on Linux by default! Yeah, that’s right! It’s been happening on Windows already, but macOS is still missing out.
For most of you Linux folks, no biggie, right? But hold on, if you’ve got a root certificate bundle chilling at
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem, you might run into some trust issues and bump into NU3042. Oops! Wanna skip the verification part? No problemo! Just set the
DOTNET_NUGET_SIGNATURE_VERIFICATION environment variable to
false. Easy peasy!
NuGet: Checking Package Dependencies for Security Flaws
Enable NuGet security auditing, and
dotnet restore will generate a report of security vulnerabilities, including the impact, severity, and affected package versions. To activate this feature, add
<EnablePackageVulnerabilityAnalysis>true</EnablePackageVulnerabilityAnalysis> to your project file or
Directory.Build.props. Stay safe out there, fellow C# nerds!
Supercharge Your Security with Auditing
Ready to boost your project’s security? Now you can opt for security audit reports! You can achieve this by adding the next MSBuild property to your
.csproj or MSBuild file:
Loading code snippet...
And bam! You’re in. And hey, don’t forget to define NuGet.org as one of your package sources to access the juicy vulnerability dataset:
Loading code snippet...
Handle Vulnerable Packages like a Pro
Adding a package with known vulnerabilities? No worries,
dotnet restore has your back with a heads-up warning! Run
dotnet restore, and you’ll get warnings for each affected package and advisory. Neat, huh?
Oh, and check out these warning codes for different severity levels:
Want more control? Set the
<NuGetAuditLevel> MSBuild property to your desired level. Choose from
critical. So, if you’re into
critical advisories, check this example:
Loading code snippet...
Embrace the Power of UTF8
Now, the new
IUtf8SpanFormattable interface, which is like its buddy
ISpanFormattable, but for UTF8 and
Span<byte>. Sound cool? It gets better. It’s now implemented on all primitive types using shared logic, so you can format directly to UTF8 from various types like
DateTime, and even
Plus, the new
Utf8.TryWrite methods are the UTF8 versions of
MemoryExtensions.TryWrite. You can use interpolated string syntax to format complex expressions directly into a span of UTF8 bytes. Sweet!
Time Traveling Testers, Rejoice!
TimeProvider abstract class! Mock time like a boss in your test scenarios, even mock Task operations too. Grab local and UTC time, measure performance with timestamps, and create timers effortlessly. And the icing on the cake? There’s a netstandard 2.0 library called
Microsoft.Bcl.TimeProvider for supported .NET Framework versions and earlier .NET editions.
Unleash the Power of Vector512 and AVX-512
.NET 8 is all about that SIMD life with
System.Runtime.Intrinsics.Vector512<T> and AVX-512 for x86/x64 hardware. Preview 4 serves up 512-bit vector operations, 16 bonus SIMD registers, and extra instructions for 128-bit, 256-bit, and 512-bit vectors. Curious if your hardware’s up for it? Just check
AOT All the Way!
Did you know? .NET 8 Preview 4’s default
console template is AOT-ready! Run
dotnet new console --aot and voilà, an AOT-compiled project is yours. Choose an optimization preference like Speed or Size to hit that sweet spot.
Keep Your Linux Game Strong
.NET 8 Preview 4 updates the supported Linux distro versions and has its sights set on Ubuntu 16.04 for all architectures. Preview 5 plans to upgrade the .NET 8 Linux build with clang 16 to maintain the Linux love for Arm32, Arm64, and x64 architectures.
System.Text.Json: Deserialize Like a Pro
Another feature is, System.Text.Json unlocks deserialization onto read-only fields and/or properties. Just tweak the
JsonSerializerOptions like this:
Loading code snippet...
This makes deserialization more efficient and friendly with read-only properties or fields.
System.Text.Json: Unleash the Power!
In .NET 8 Preview 4, System.Text.Json levels up with new features like
TypeInfoResolverChain, and support for unspeakable types.
Plus, it says bye to
JsonSerializerOptions.AddContext and welcomes a
Try- version of
GetTypeInfo. All these upgrades make JSON handling even more powerful and convenient.
Codegen: Consecutive Register Allocation FTW
.NET 8 Preview 4 introduces “consecutive register” allocation in RyuJIT’s register allocator. The algorithm’s been tweaked to make this happen, making your codegen for Arm64 even more efficient.
Debugging on Visual Studio for Mac Just Got Better!
.NET 8 Preview 4 delivers a new and improved debugging experience for Visual Studio for Mac users. The new debugging engine boosts performance and reliability, with faster stepping, a more precise call stack, and smoother handling of multi-process and multi-threaded debugging.
Note that this new engine is only available for .NET Core 3.1, .NET 5, and later projects.
The Microsoft.Extensions.Logging library in .NET 8 Preview 4 now supports scopes and structured logging. Create log scopes using the
LoggerMessage.DefineScope method to capture structured data without any additional memory allocation.
The new API is also compatible with the
Log methods provided by the
LoggerMessage class for a consistent logging experience.
So there you have it, folks! We’ve dived into some thrilling new features and enhancements in .NET 8 Preview 4, shining the spotlight on System.Text.Json improvements, register allocation in codegen, and unspeakable types support. These updates showcase Microsoft’s dedication to equipping devs with potent and streamlined tools for crafting top-notch applications. Happy coding!