A sample code for a talk "What's new in .NET world". This sample is written for .NET 7 and .NET 8, using C# 11 and C# 12.
The sample code and a separate presentation for ASP.NET Core Minimal APIs is available in a separate GitHub repository.
The older sample covering .NET 6 and .NET 7 is available in another repository.
- What's new in .NET world?
- Presentations
- Languages
- .NET BCL, SDK and tools
- Performance improvements
- Entity Framework Core
- ASP.NET Core
- Blazor
- MAUI
- gRPC
- .NET Aspire
- Desktop
- Monitoring and metrics
- CoreWCF
- YARP
- ML.NET
- Microsoft Orleans
- Dapr
- Community Toolkits
- Other libraries
- Cloud and dogfooding
- Visual Studio
- Visual Studio Code
- JetBrains tools
- Dev tools
- GitHub Copilot
- AI
- License
A new proposals for C# features are available in the C# language GitHub repository.
- Announcements, blog posts and videos
- Raw string literals
- New lines inside the "holes" of interpolated strings
- List patterns to match against lists and arrays
- Pattern matching strings with spans
- Auto-default structs
- Required members
public require string Name { get; init; }
- Specification
- Sample
- Generic attributes
- File-scoped types
- UTF-8 string literals
- Other new features...
- Announcements and blog posts
- Primary constructors for non-record classes and structs
- Using aliases for any type
- Default values for lambda expression parameters
- Collection literals
- Interceptors
nameof
accessing instance membersref readonly
parameters- Inline arrays
- New
Experimental
attribute
- Announcement
- Static abstract members in interfaces
- Easier Statically Resolved Type Parameters
- Required properties checking, init scope and init-only parameters
- Reference assemblies support
- F# self-contained deployment
- Native AOT
- Announcements
- F# inline types and parameter name hints in Visual Studio
- New syntax for string interpolation
- New
while!
keyword - Graph-based type-checking - a new compiler feature
_.Property
shorthand for(fun x -> x.Property)
- Nested record field copy and update
- Use and compose string literals for printf and related functions
- Arithmetic operations in literals
- Type constraint intersection syntax
- Extended fixed bindings
- Easier
[<Extension>]
method definition - Making F# more uniform
- Static members in interfaces
- Static let in discriminated unions, records, structs, and types without primary constructor
try-with
withinseq{}
,[]
and[||]
collection expressions- Announcement
- New diagnostics
TailCall
attribute- Diagnostics on static classes
- Diagnostics on
[<Obsolete>]
usage - Optional warning when
obj
is inferred - Optional warning when copy and update changes all fields
- Announcement
- Quality of life improvements
- Trimmability for compiler-generated code
- Parser recovery
- Strict indentation rules
- Autocomplete improvements
[<Struct>]
unions can now have > 49 cases
- Compiler performance
- Reference assemblies optimization
- New switches for compiler parallelization
- Announcement
- Enhancements to the FSharp.Core standard library
- Inlining
Array.Parallel.*
APIs improvements- Announcement
- No new features in the language itself!
- Other than the ones that are shared with all .NET languages
- Some improvements, like refactorings, are available in Visual Studio 2022
- WinForms Visual Basic Application Framework has new features
- Announcements and blog posts
- Generic math
System.Numerics
INumber<T>
,IBinaryInteger
,IFloatingPoint
,IFloatingPointIeee754
,INumberBase
,ISignedNumber
- Separate interfaces for functions and operators – like
IAdditionOperators
- New C# feature - using static abstract methods in interfaces
- Announcement
- Sample
- New Regex APIs
RegexGenerator
and Roslyn analyzers [Demo]RegexOptions.NonBacktracking
- Regex Source Generator announcements
- A lot of other improvements
- Sample
- Rate limiting
- Different algorithms: concurrency, token bucket, fixed window, sliding window, partitioned...
System.Threading.RateLimiting
- Announcement
- Sample in Minimal APIs repo
Microseconds
andNanoseconds
in date and time types- New
Stream
methods –ReadExactly
andReadAtLeast
- Tar archive support
System.Formats.Tar
assembly- Announcement 1
- Announcement 2
- Support for Unix file modes
- Networking improvements
- Announcement
- HTTP improvements
- Improved handling of connection attempt failures
HttpHeaders
read thread safety- Detect HTTP/2 and HTTP/3 protocol errors
- HTTP/3 fixes
- QUIC support
- Security
- Negotiate API
- Options for certificate validation
- Performance
- WebSockets improvements
- Announcements and blog posts
- Native AOT
- Reduced size of the single file apps
- Console template has out of the box support for Native AOT with
dotnet new console --aot
- Various improvements and optimizations
- Sample CSharp project and publish command
- Announcement 1
- Announcement 2
- Announcement 3
- Utility methods for working with randomness
GetItems
andShuffle
- Announcement
- New performance focused types in the core libraries
FrozenDictionary<TKey, TValue>
andFrozenSet<T>
- Announcement
System.ComponentModel.DataAnnotations
extensionsRequiredAttribute.DisallowAllDefaultValues
- preventsGuid.Empty
,0
,false
, etc. from being validLengthAttribute
can now set both upper and lower bounds for strings and collections- New
AllowedValuesAttribute
andDeniedValuesAttribute
- New
Base64StringAttribute
- Sample
- Announcement
- UTF8 improvements
TimeProvider
abstract class for time abstraction- Enables mocking in test scenarios
- Also supported by other features that rely on time progression, such as
Task.Delay
andTask.Async
- Sample
- Announcement
- Steven Giesel: Time abstractions in .NET 8
- Nick Chapsas: Microsoft fixed the "time" issue AGAIN in .NET 8
- Andrew Lock: Avoiding flaky tests with TimeProvider and ITimer
- Hardware intrinsic improvements
- Performance optimization and hardware acceleration for Vector and matrix operations
System.Numerics
andSystem.Runtime.Intrinsics
- Announcement 1
- Announcement 2
System.Reflection
: introspection support for function pointersValidateOptionsResultBuilder
- New configuration binding source generator
- Avoids reflection at runtime, and enables Native AOT scenarios
Microsoft.Extensions.Configuration.Binder
NuGet package<EnableMicrosoftExtensionsConfigurationBinderSourceGenerator>
in the project file- Announcement 1
- Announcement 2
- Andrew Lock: Using the new configuration binder source generator
- New options validation source generator
- Source generated COM interop
- Enhancements to Metrics APIs
- DI friendly metrics APIs
- Tagging meters and instruments with key-value pair tags
- New
MetricCollector
Metrics API for test scenarios - Announcement 1
- Announcement 2
- Stream-based
ZipFile
CreateFromDirectory
andExtractToDirectory
method overloads System.Security
SHA-3 supportIHostedLifecycleService
interface- Methods:
StartingAsync
,StartedAsync
,StoppingAsync
,StoppedAsync
- As a reminder,
IHostedService
hasStartAsync
andStopAsync
methods
- As a reminder,
- Announcement
- Steve Gordon: Introducing the new
IHostedLifecycleService
interface in .NET 8
- Methods:
- Keyed service registration for dependency injection
- HTTPS proxy with HttpClient
- I.e. protection against interception (man in the middle) attacks
- Announcement
- Struct physical promotion
- Optimization in JIT that replaces the fields of struct variables by primitive variables
- Announcement
- Cross-building Windows apps with Win32 resources on non-Windows
- New package READMEs for .NET libraries
- Polymorphism
JsonDerivedType
attribute- Announcement 1
- Announcement 2
- Sample
- JSON contract customization
- Adding type modifiers to
DefaultJsonTypeInfoResolver
- Creating custom
IJsonTypeInfoResolver
- Conditional property serialization
- Announcement 1
- Announcement 2
- Sample
- Adding type modifiers to
- Source generation improvements
- support for
IAsyncEnumerable
,JsonDocument
andDateOnly
/TimeOnly
types - Announcement
- support for
Utf8JsonReader.CopyString()
method- Performance improvements
- Required members
JsonSerializerOptions.Default
- Blog posts and announcements
- Improvements
- Missing member handling -
JsonUnmappedMemberHandling
- Sample - Source generator support for
required
andinit
properties JsonSourceGenerationOptionsAttribute
now has feature parity with theJsonSerializerOptions
class- Interface hierarchy support
snake_case
andkebab-case
support for property names - SampleJsonSerializer.IsReflectionEnabledByDefault
property to help with Native AOT scenarios- Not all serialization options are supported - i.e., dynamic types are not
- JSON contract customization improvements
- New
IJsonTypeInfoResolver.WithAddedModifier
extension method
- New
- Improvements for combining source generators -
JsonSerializerOptions.TypeInfoResolverChain
- Unspeakable types support - i.e., local functions
- Support for
Memory<T>
andReadOnlyMemory<T>
types - Support for
Half
,Int128
andUInt128
types - Extending
JsonIncludeAttribute
andJsonConstructorAttribute
to non-public members - An option to disable reflection defaults
System.Net.Http.Json
extensions forIAsyncEnumerable
JsonNode.ParseAsync
APIsJsonSerializerOptions.MakeReadOnly(bool populateMissingResolver)
for setting options as readonly- Announcement 1
- Announcement 2
- Announcement 3
- Announcement 4
- Announcement 5
- Announcement 6
- Missing member handling -
- Populating read-only members
- New converter -
JsonStringEnumConverter<TEnum>
- Supports Native AOT
- Announcement 1
- Announcement 2
- Single-usage
JsonSerializerOptions
analyzer - Additional
JsonNode
functionality- I.e., Deep Cloning, parsing from a stream,...
- Announcement
- Native AOT
- No longer experimental
- Generates code at build time instead of runtime
- Improves startup time, memory usage, access to restricted platforms (no JIT), size on disk
- Console apps and native libraries only
- Announcement
- Specification
- New CLI parser
dotnet new
improved CLIdotnet --info
updates- Announcement
- Central Package Management –
Directory.Packages.props
- Improved .NET host error messages – i.e., missing runtime errors
Console.ReadKey
improved, especially for Linux- Template authoring improvements
- Constraints (OS, workload, host), multi-choice parameters, better exit codes and error reporting
- Announcement
- Built-in container support for .NET SDK
dotnet publish
anddotnet pack
produce Release output by defaultdotnet workload clean
command- Garbage collection for workloads, cleaning the orphaned packs
--all
cleans every existing pack on the machine that is not from VS and is of current SDK workload installation type (file-based or MSI-based)- Announcement
- New, modern terminal build output from MSBuild
- Use
/tl
switch -dotnet build /tl
- Sample
- Announcement
- Use
- Simplified build output path
/artifacts
folder is used by default<ArtifactsPath>$(MSBuildThisFileDirectory)artifacts</ArtifactsPath>
inDirectory.Build.props
file (dotnet new buildprops --use-artifacts
)- Sample
- Announcement 1
- Announcement 2
- Improved self-contained deployment
- Linux self-contained
- Self-contained publish switch is no longer default
- Announcement
- Better security with packages from Nuget.org
- Prevents downloading packages from
http://
feeds, but allows overrides with--force
flag - Signed package verification on Linux is on by default
- Auditing NuGet package dependencies for security vulnerabilities
- Announcement 1
- Anouncement 2
- Prevents downloading packages from
- .NET Container images improvements
- Debian 12 (Bookworm) used as a default Linux distro
- Using Ubuntu Chiseled container images with .NET 8
- Running container images with non-root users -
USER app
inside Dockerfile, or-u app
when launching image- Also helps with Kubernetes "Restricted" hardening best practices
- This is default from .NET 8 Preview 6
app
user available in all .NET 8 Linux images- All images are now using port
8080
by default (not requiring root permissions) - New Alpine ASP.NET Docker composite images
- New Jammy Chiseled and Mariner Distroless Docker composite images
- Publishing images to Docker Hub via
dotnet publish
works as expected withdocker.io
registry - Container publishing now supports Azure Managed Identity
- Container publishing now supports publishing to tar.gz archive
- Announcement 1
- Announcement 2
- Announcement 3
- Announcement 4
- Announcement 5
- Announcement 6
- Andrew Lock: Updates to Docker images in .NET 8
- Announcement 7
- Laurent Kempe: Simplify your .NET Docker image publishing workflow with the .NET SDK
- Richard Lander: Announcing .NET Chiseled Containers
- Tim Anderson: Ubuntu chiselled containers arrive for .NET - smaller, more secure, but beware of 'sharp edges'
- Expanded support for building containers from .NET CLI
- This is actually available in .NET 7.0.200 SDK, but mentioning it here as it was not included in the initial .NET 7 release
- Registry authentication
- Cross-architecture containers
- Building multi-platform container images
- Improved support for rootless containers
- Easier to get started in Web SDK projects - add
<EnableSdkContainerSupport>
- Announcement 1
- Announcement 2
- Source Link is included to the .NET SDK
- New .NET libraries analyzer
- CodeGen improvements
- Dynamic profile guided optimization (PGO) is enabled by default
- Announcement 1
- Announcement 2
- Debugging enhancements
- For
HttpContext
, request, responses, gRPC,IConfiguration
, logging, etc. - Announcement
- For
- MSBuild: Simple CLI-based project evaluation with
dotnet publish --getProperty:Xyz
- Tensor primitives in
System.Numerics.Tensor
- Hot Reload improvements for Blazor WebAssembly, iOS and Android
- More lambda methods support
- Adding new static fields, static methods, and non-virtual instance methods
- Adding new classes
dotnet watch
restarts for rude edits- Announcement
- NuGet 6.4
- Central Package Management
GlobalPackageReference
- Improved VS performance
- Announcement
- Olia Gavrysh: Upgrading your .NET projects with Visual Studio
- Olia Gavrysh: Announcing an update for .NET Upgrade Assistant with a new CLI tool!
- Olia Gavrysh: New .NET Upgrade Assistant version with feature updates and .NET MAUI improvements!
- Hot Reload supports modifying generics
- NuGet 6.7
- Package source mapping status is displayed in the package details pane
- Easily create package source mappings for your NuGet.config
- New
VulnerabilityInfo
API in NuGet.Protocol - Know what package versions are vulnerable when you select them
- New warnings on Linux and macOS if signed package verification is untrusted
- Announcement
- Announcements and blog posts
- Stephen Toub: Performance improvements in .NET 7
- Kunal Pathak: Arm64 performance improvements in .NET 7
- Jon Douglas, Jeremy Likness and Angelos Petropoulos: .NET 7 is available today
- Jonathan Peppers: .NET 7 performance improvements in .NET MAUI
- Brennan Conroy: Performance improvements in ASP.NET 7
- TechEmpower Web Framework Benchmark: Round 21
- Dustin Moris: How fast is really ASP.NET Core
- nopCommerce: Update to .NET 7 - what updates it brings and how it may improve a software
- Improvements in existing CodeGen / JIT features
- Dynamic PGO
- Arm64
- Loop optimizations
- Logging source generator improvements
- On-Stack Replacement (OSR)
- Mono performance improved
- Regex source generator and other regex performance improvements
- Reflection and Interop
- Threading improvement
- Primitive types parsing, formatting and equality
- Arrays, strings,
Collection
s andSpan
s - LINQ
Min
,Max
,Sum
,Average
- JSON, XML, Compression, Cryptography, Diagnostics, Exceptions...
- Announcements and blog posts
- Announcements and blog posts
- JSON columns in relational databases
- Bulk updates
- Performance improvements on inserts and updates (
SaveChanges
) - Map CUD operations to stored procedures
- Table-per-concrete-type (TPC) mapping
- Override model building conventions
- Database scaffolding T4 templates
- Interceptors improvements
- Intercept, modify, and/or suppress EF core operation
- Query enhancements
- ...
- Announcements, blog posts and videos
- Raw SQL queries for unmapped types
- Lazy loading for no-tracking queries
- DateOnly/TimeOnly support on SQL Server
- JSON columns in SQLite and PostgreSQL
- SQL Server HierarchyId support
- Translating LINQ Contains to OpenJson query
- Complex types as value objects
- Primitive collections
- A lot of smaller improvements
- A new MongoDB provider for EF Core - maintained by MongoDB
- Announcements, blog posts and videos
RateLimiting
middleware- Output caching middleware
- Incremental ASP.NET migration tooling
- Authentication improvements
- Announcement
- This has been partially removed from .NET 7
- Kestrel improvements
- New problem details service
- Request decompression middleware (Brotli, Deflate, and GZip)
- No longer required to use
[FromServices]
in action method parameters TryParse
method support for action method parameters- Dark mode for developer exception page
- Managing development-time JWTs with
dotnet user-jwt
- Performance improvements
- Blog posts
- Sample
IEndpointFilter
support- Announcement 1 - before rename
- Announcement 2
IFormFile
andIFormFileCollection
- Binding to
Stream
orPipeReader
- Binding a set of parameters into a single object with properties with
[AsParameters]
- Binding arrays
- Endpoint description and summaries used for OpenAPI
IResult
implementations are now public for improved testability and have new interfacesIContentTypeHttpResult
,IFileHttpResult
,INestedHttpResult
,IStatusCodeHttpResult
,IValueHttpResult
- Announcement
- Typed results –
Microsoft.AspNetCore.Http.TypedResults
- Self-describing minimal APIs
IEndpointMetadataProvider
,IEndpointParameterMetadataProvider
- Uses C# 11 static abstract interface members, works with
TypedResults
- Announcement
- Route groups with
MapGroup()
- Client source generator
- Dependency injection for hub methods
- Invoke client results from server using Clients.Single(connId).InvokeAsync()
- Announcements and blog posts
- Improved authentication & authorization experience
- Removal of Duende IdentityServer from templates
- Improved auth for self-hosting solutions
- Extended existing cookie-based auth to support customization in SPA apps
- Modernized existing identity to support token-based auth
- This is intended for single domain solutions, with no cloud authentication or third-party API requirements!
- New bearer token authentication handler - issues and validates tokens, with refresh tokens support
- Improved documentation, with a starting point for all auth scenarios
- Identity API endpoints in Preview 4
- Identity API endpoints in Preview 7
- Announcement 1
- Announcement 2
- Announcement 3
- Announcement 4
- Announcement 5
- David Fowler's identity endpoints sample
- Andrew Lock: Introducing the Identity API endpoints
- Andrew Lock: Should you use the .NET 8 Identity API endpoints?
- Andrew Lock: Can you use the .NET 8 Identity API endpoints with IdentityServer?
- Jeremy Likness: What's new with identity in .NET 8
- Andrea Chiarelli: Cookies, Tokens, or JWTs? The ASP.NET Core Identity Dilemma
- Support for Native AOT
- Only a partial support, available for some templates
- Top-level APIs annotated for trim warnings
- Reduced app size with configurable HTTPS support
- Worker Service template received AOT support
- Full TrimMode is used for web projects compiled with trimming enabled
- Trim .NET IL after ahead-of-time compilation
- Announcement 1
- Announcement 2
- Announcement 3
- Announcement 4
- Announcement 5
- Benchmarks
- Getting started
SlimBuilder
WebApplication.CreateSlimBuilder
API- Initializes only the essential features to minimize the app size
- Announcement
- Andrew Lock: Comparing
WebApplication.CreateBuilder()
to the newCreateSlimBuilder()
method
- Empty builder
WebApplication.CreateEmptyBuilder
API- No built-in behavior, only services and middleware that you configure
- Announcement
- Antiforgery middleware
services.AddAntiforgery();
- No short-circuiting in middleware itself, each framework implementation (minimal APIs, MVC, Blazor) needs to handle it
- Announcement
- Route tooling
- Built on Roslyn, should work on any IDE
- Route syntax highlighting
- Autocomplete of parameter and route names
- Autocomplete of route constraints
- Route analyzers and fixers
- Supporting Minimal APIs, Web APIs, and Blazor
- Announcement 1
- Announcement 2
- Announcement 3
- Route constraint performance improvement
- Regex constraints are now compiled
- Duplicate constraints are now shared between routes
- The alpha constraint now uses source generated regex
- Announcement
- Request timeouts
- Available for individual endpoints, controllers, or dynamically per request
builder.Services.AddRequestTimeouts();
app.UseRequestTimeouts();
.WithRequestTimeout(timeout)
or[RequestTimeout(timeout)]
HttpContext.RequestAborted
cancellation token is triggered upon expiration, but the app is not aborted- Announcement
- Short circuit routes
app.MapGet("/", () => "Hello World!").ShortCircuit();
- define a route to short circuitapp.MapShortCircuit(404, "robots.txt", "favicon.ico");
- define endpoints and status codes to short circuit- Announcement
- Andrew Lock: Short-circuit routing in .NET 8
- New analyzers for API development
- New analyzer to detect multiple
[FromBody]
attributes - New options to keep the SPA development server running
- New Visual Studio templates
- For Angular, React, and Vue
- Uses the latest frontend JavaScript CLI tooling (Vite)
- Built on the new JavaScript project system (.esproj) and integrate with ASP.NET Core backend project
- Announcement 1
- Announcement 2
- Announcement 3
- Announcement 4
- Announcement 5
- Kestrel and HttpSys connection improvements
- Support for named pipes in Kestrel
- HTTP/3
enableddisabled by default - HTTP/2 over TLS (HTTPS) support on macOS
- New
HTTP_PORTS
andHTTPS_PORTS
configuration options - HTTP.sys kernel response buffering
- Announcement 1
- Announcement 2
- Performance improvements for named pipes transport
IPNetwork.Parse
andTryParse
methods- Support for creating
IPNetwork
instances from CIDR notation - Announcement
- Support for creating
- New APIs in
ProblemDetails
to support more resilient integrationsTryWriteAsync
API used to have a fallback whenProblemDetail
cannot be generated- Announcement
- New
IResettable
interface inMicrosoft.Extensions.ObjectPool
- Debugging experience improvements
- Debug customization attributes
HttpContext
,HttpRequest
,HttpResponse
, andClaimsPrincipal
have better debugging experience- Announcement 1
- Announcement 2
- Announcement 3
- New
IExceptionHandler
interface - Improvements to the caching abstraction
- Probably post .NET 8
- Announcement
- Redis-based output caching
System.Web.Adapters
for migration from ASP.NET to ASP.NET Core- Support for keyed services in Minimal APIs, MVC, and SignalR
- Support for form files in new form binding
- Generic attributes for MVC
- Attributes that required a
Type
parameter are now generic, i.e.,ProducesResponseType<Todo>
- Announcement
- Attributes that required a
- Request Delegate Generator (RDG) source generator
- Enables Native AOT scenarios by removing runtime generation of the code
- Still does not support all Minimal API features
<EnableRequestDelegateGenerator>
in project file- RDG is using C# 12 interceptors feature
- Announcement 1
- Announcement 2
- Announcement 3
- Andrew Lock: Exploring the new minimal API source generator
- No need for
[FromForm]
attribute for form-based parameters (IFormCollection
,IFormFile
, andIFormFileCollection
) - Complex form binding support
- API project template includes
.http
file (available for any API project) - Support for generic attributes
- AOT support
- Specify server timeout and keep alive settings using the
HubConnectionBuilder
- SignalR stateful reconnect
- TypeScript client stateful reconnect support
- Support for
System.Security.Cryptography
- Blazor custom elements are no longer experimental
- QuickGrid component (experimental)
- New loading page
- Interoperability between .NET 7 and JavaScript through .NET WebAssembly runtime
- WebAssembly multithreading (experimental)
- Empty Blazor project templates
@bind:get
(value),@bind:set
(callback),@bind:after
(async) modifiersNavigationManager
– pass state- Dynamic authentication requests in Blazor WebAssembly – custom params
- Improved diagnostics for authentication in Blazor WebAssembly
- Blazor WebAssembly debugging improvements
- Documentation
- Running natively on Windows and macOS via MAUI
BlazorWebView
for WPF, Windows Forms, and MAUI apps
- Announcements and blog posts
- Jon Hilton: Big changes coming for Blazor in .NET 8
- Jon Hilton: Interactive components using Blazor WASM
- Jon Hilton: Capture user input with forms
- Jon Hilton: How to migrate your Blazor Server apps to .NET 8
- Jon Hilton: .NET 8's Release Candidate Delivers a Smoother 'Out-of-the-Box' Experience for Blazor
- Rockford Lhotka: Flowing State in Blazor 8
- Dustin Moris: .NET Blazor
- (Just) Blazor
- Previously "Blazor United" or "Full stack web UI with Blazor"
- Announcement 1
- Announcement 2
- Announcement 3
- Static server-side rendering with Blazor components
- Streaming rendering with Blazor components
- Needs
[StreamRendering(true)]
on the component - Announcement
- Needs
- Specify component render mode at the call site
- Interactive rendering with Blazor WebAssembly
- Auto render mode
- Uses WebAssembly if it can be loaded quickly (within 100ms)
- i.e., if runtime is previously downloaded and cached, or if on high speed network
- Otherwise falls back to server-side rendering, and downloads WebAssembly runtime in the background
- Announcement
- Uses WebAssembly if it can be loaded quickly (within 100ms)
- Rendering Razor components outside of ASP.NET Core
- I.e., to a string or stream
- Example use case: generate emails, static site content, etc.
- Announcement
- Andrew Lock: Rendering Blazor components to a string
- File scoped
@rendermode
Razor directove - Support for Sections in Blazor
SectionOutlet
andSectionContent
components- Can be used as placeholders in layout that are filled in by specific pages
- Announcement 1
- Announcement 2
- Route to named elements
- If HTML elements have the standard
id
attribute, Blazor will scroll the page when URL fragment matches theid
- Announcement
- If HTML elements have the standard
- Cascade query string values to Blazor components
- Access HttpContext as a cascading parameter
- Register root-level cascading values
- Antiforgery integration
- Blazor endpoints now require antiforgery protection by default
EditForm
component adds antiforgery token automatically- Announcement
- Monitoring Blazor Server circuit activity
- Inbound circuit activity is any activity that originates from the browser, like UI events or JavaScript-to-.NET interop calls
CircuitHandler.CreateInboundActivityHandler
- Announcement
QuickGrid
is now part of .NET 8- Debugging and hot reload improvements
- Hot reload support for instance fields, properties, and events for .NET on WebAssembly
- Support for symbol servers when debugging .NET on WebAssembly
- Blazor WebAssembly debugging in Firefox
- Announcement
- Experimental Webcil format for .NET assemblies and Blazor WebAssembly apps
<WasmEnableWebcil>true</WasmEnableWebcil>
in WebAssembly project file- Announcement 1
- Announcement 2
- Announcement 3
- Announcement 4
- Improved Blazor WebAssembly performance with the jiterpreter
- Replacing the interpreter bytecodes with tiny blobs of WebAssembly
- Useful when AOT compiler is not an option, but can optimize AOT performance too
- Announcement
- New Blazor Web App project template
- New Blazor scaffolder
- Still in preview, and needs to be used with Visual Studio Preview
- Announcement
- Blazor router integration with endpoint routing
- Routing with server-side rendering works just like it does with client-side rendering
- Announcement 1
- Announcement 2
- Content Security Policy (CSP) compatibility
- No longer requires
unsafe-eval
- Announcement
- No longer requires
HybridGlobalization
mode on WASMWasmStripILAfterAOT
mode on WASM- Discover components from additional assemblies for static server rendering
- Trigger a page refresh from navigation
- Enhanced navigation & form handling improvements
- Form model binding improvements
- Persist component state in a Blazor Web API
- Support for dialog cancel and close events
- Error page support
- Blazor Identity UI
- Announcements, blog posts, documentation
- Documentation
- Michael Stonis: .NET MAUI eBook now available - Enterprise Application Patterns
- David Ortinau: .NET MAUI - one codebase, many platforms
- David Ortinau: .NET MAUI in .NET 7 Release Candidate 1
- David Ortinau: Announcing .NET MAUI for .NET 7 general availability
- James Montemagno: 5 .NET MAUI features for building great desktop apps
- David Ramel: Did .NET MAUI ship too soon? Devs sound off on 'massive mistake'
- Miguel de Icaza: Twitter thread on .NET MAUI
- Support for iOS, Android, macOS, Windows, Tizen
- Essentials (previously Xamarin.Essentials) for common device features is included in core
- .NET MAUI Community Toolkit
- Performance improvement over Xamarin.Forms
- maui-check tool – check and fix the requirements
- Supported in
Microsoft.Identity.Client
for authentication
- Announcements, blog posts, documentation
- Roadmap
- Announcing .NET MAUI in .NET 8 Preview 5
- Announcing .NET MAUI in .NET 8 Preview 6
- Announcing .NET MAUI in .NET 8 Preview 7: Keyboard accelerators]
- Tim Anderson: Microsoft releases new preview of MAUI with 'lots of bug fixes' but quality concerns linger
- Announcing .NET MAUI in .NET 8 Release Candidate 1: Quality
- Jonathan Peppers: .NET 8 Performance Improvements in .NET MAUI
- David Ramel: New .NET MAUI Docs Detail How to Migrate from Xamarin.Forms
- David Ortinau: Announcing .NET MAUI in .NET 8
- Improving quality - resolving issues, merging pull requests
- Most attention was given to
CollectionView
,Shell
and drawing (shapes, shadows, clipping) - Memory leak resolutions, UI control enhancements, platform specific fixes, performance optimizations
- Announcement 1
- Announcement 2
- Announcement 3
- Most attention was given to
- Improving memory management
- New version of .NET Upgrade Assistant supports Xamarin.Forms upgrade to .NET MAUI
- Support for targeting iOS platforms with Native AOT
- Hybrid globalization mode
- For iOS, tvOS, macOS, and MacCatalyst platforms
- Reduces the size of the bundle
- Announcement
- Desktop keyboard accelerators
- Pointer and Drag and Drop gesture enhancements
- New Visual Studio Code extension for .NET MAUI
AndroidStripILAfterAOT
mode on Android- XCode 15 support
- Improvements and changes in Android resource generation in .NET 8
- JSON transcoding
- Use gRPC services like RESTful HTTP APIs
- OpenAPI support (Experimental)
- Announcement 1
- Announcement 2
- gRPC JSON transcoding no longer requires
http.proto
andannotations.proto
- Native AOT supported for both client and server apps
- A cloud ready stack for building observable, production ready, distributed applications
- Includes: Dashboard, components, orchestration, templates, and tooling support
- In Preview, GA release expected in the spring 2024.
- Announcements, blog posts and documentation
- Accessibility improvements and fixes
- High DPI and scaling improvements
- Databinding improvements
- ComWrappers and native AOT
- Custom controls for WinForm's out-of-process designer
- Using MVVM with WinForms and going cross-platform with MAUI
- Improved code generation for
InitializeComponent
- WinForms Visual Basic Application Framework has new features
- TODO: ...
- Performance
- Accessibility
- Bug fixes
- Blog posts and announcements
OpenFolderDialog
- WPF Hardware Acceleration in RDP
- Added metrics for
Microsoft.Extensions.Caching
MemoryCacheStatistics
– cache hit/miss/estimated size and countIMemoryCache.GetCurrentStatistics()
- Announcement
- Metrics added for ASP.NET Core hosting, Kestrel and SignalR
- A new Azure Monitor OpenTelemetry distro library
- Enables monitoring ASP.NET Core apps with Azure Monitor, based on the infrastructure of OpenTelemetry for .NET
- Announcement
- Testing metrics in ASP.NET Core apps using
IMeterFactory
andMetricCollector<T>
- New, improved and renamed counters
- Community project
- Features are a subset of functionality from WCF
- HTTP and NetTCP transports
BasicHttpBinding
,NetHttpBinding
,NetTcpBinding
,WebHttpBinding
,WSHttpBinding
(some WS-* features are not supported)- Transport security, Username, Certificate and Windows auth, WS Federation...
- WSDL generation
- Partial configuration support including service and endpoints
- Extensibility (
IServiceBehavior
andIEndpointBehavior
)
- Not implemented
- Transports other than HTTP and NetTCP
- Named Pipes are coming in 1.4
- Message security beyond Transport and Transport with Message Credentials
- Distributed transactions
- Message Queueing
- Queue Transport is coming in 1.4
- Transports other than HTTP and NetTCP
- 1.0 released in April 2022.
- Project templates added in 1.1
- 1.2 released in September 2022.
- 1.3 brought support for ASP.NET Core authorization
- 1.4 brings support for Named Pipes and Queue transports
- .NET Upgrade Assistant is able to migrate WCF services to CoreWCF
- Client support for calling WCF/CoreWCF with
System.ServiceModel
6.0 is available
- YARP: Yet Another Reverse Proxy
- Announcements and blog posts
- WebSockets over HTTP/2
- ML.NET is an open-source, cross-platform machine learning framework for .NET developers
- ML.NET 2.0 released on November 2022
- Announcement
- Text Classification scenario in Model Builder
- Sentence Similarity API
- Tokenizer support
- Automated machine learning (AutoML) improvements
- ML.NET 3.0 Preview 2 released May 16th 2023
- Announcement
- New AutoML features
- Using TorchSharp for Object Detection
- Upgraded libraries used to latest version
- Compiled with .NET 8
- ML.NET 3.0 released November 22nd 2023
- Announcement 1
- Announcement 2
- Deep Learning improvements
- Intel oneDAL training acceleration
- Tensor primitives integration
- Author, train, and use SynapseML model from C#, or any .NET language, with .NET for Apache Spark language bindings
- Enables distributed machine learning functionality
- Announcement
- Documentation
- SynapseML on GitHub
- Cloud native application framework for .NET
- Version 7.0 released with with .NET 7
- Announcement
- Inlined with .NET versions
- Performance improvements
- Improved development experience
- Simplified
Grain
andStream
identification
- APIs for building portable and reliable microservices
- The current version is 1.10.x, with 1.11.0 in RC1 phase
- Dapr is integrated into Azure Container Apps
- .NET Community Toolkit
- Version 8.0 released in April 2022
- MVVM toolkit
- Inspired by MvvmLight
- Source generators for commands and observable properties
- Improved messenger APIs
- Sample app
- Improved diagnostics API
- Support for .NET 6
- MVVM toolkit
- Version 8.1 released in January 2023
- Custom attributes for
[ObservableProperty]
- MVVM Toolkit analyzers
- MVVM Toolkit source generator optimizations
IObservable<T>
messenger extensions- Support for .NET 7
- Custom attributes for
- Version 8.2 released in April 2023
- Custom attributes for
[RelayCommand]
- I.e., adding
[property: JsonIgnore]
to the command method will add it to the generated command property
- I.e., adding
- New
[ObservableProperty]
change hooks - MVVM Toolkit code fixers
- MVVM Toolkit source generator optimizations
- Custom attributes for
- Version 8.2.1 released in June 2023
- Improved Source Generators and Code Fixers
- New analyzer and code fixer for
[RelayCommand]
- Version 8.0 released in April 2022
- Windows Community Toolkit
- .NET MAUI Community Toolkit
FileSaver
andFolderPicker
dialogs- Announcement
- Source code generators
- Bnaya Eshet: Unleashing the power of .NET source code generators
- Bnaya Eshet: Source Code Generators, DIY
- Refit: Automatic type-safe REST library
- Dunet: Discriminated unions generator
- Mapperly: object mappings
- Generator.Equals: IEquatable Generator
- Bart Wullems: Source Generator playground
- Sisk
- Polly
- AppService is using Kestrel + YARP
- Azure Functions supports .NET 7
- Amazon EC2 and AWS Lambda support .NET 7
- Azure Active Directory Gateway on .NET 6
- Microsoft Graph on .NET 6
- Azure Cosmos DB on .NET 6
- Exchange Online on .NET 6
- Microsoft Commerce on .NET 6
- Microsoft Teams Infrastructure and Assignments on .NET 6
- Microsoft Teams' Permission Service migration to .NET 6
- Bing Ads on .NET 6
- OneService Journey to .NET 6
- Bing from .NET 5 to .NET 7+
- Visual Studio 2022
- Visual Studio 2022 Preview
- Visual Studio Blog (with announcements)
- Announcements and blog posts
- Sayed Ibrahim Hashimi: Port tunneling for ASP.NET Core projects
- Dante Gagne: Visual Studio Spell Checker preview
- Sayed Ibrahim Hashimi: Web API development in VS 2022
- Jessie Houghton: Git tooling preview features to enhance productivity
- Mads Kristensen: Cool features in Visual Studio 2022
- Jordan Matthiesen: Visual Studio 2022 for Mac is now available
- Kaitlin Brooks, Cherry Wang, Dante Gagne: Visual Studio UI refresh
- Dalia Abo Sheasha: New in Visual Studio: Compare files with Solution Explorer
- Mads Kristensen: Working with images just got easier in Visual Studio
- Anthony Cangialosi: Visual Studio for Mac Retirement Announcement
- Visual Studio 2022 17.1
- Announcement
- Faster code search with indexed Find in files
- Improved Git tooling
- Improved productivity with Solution Filters
- Visual Studio 2022 17.2
- Announcement
- Source Link in Go to Implementation
- Raw string literals
- Debugging collections
- Improved Razor editor
- Improved Azure development support
- Improved Git tooling
- Visual Studio 2022 17.3
- Announcement
- MAUI support
- Support for Microsoft Teams development
- Support for deployment to Azure Container Apps
- Live unit testing
- Visual Studio 2022 17.4
- Announcement
- .NET 7 support
- Support for Arm64 building and debugging
- Visual Studio installation rollback
- Selection match highlight
- Audio cues
- DataTable visualizer
- Performance improvements
- Visual Studio 2022 17.5
- Announcement
- All-in-one search
- AI-powered, intent-based suggestions
- Debugger text visualizer - URL encode/decode, Base64 encode/decode, JWT decode
- Faster .NET builds
- Improved Razor and C# experience
- API development inner loop
- Support for
.http
/.rest
files
- Support for
- Improved Dev Tunnels configuration and management
- Accessibility checker
- Always update on close functionality
- Performance improvements
- Visual Studio 2022 17.5 for Mac
- Visual Studio 2022 17.6 Preview 1
- Announcement
- Brace Pair colorization
- Git line un-staging
- GitHub issues
- IntelliCode API usage examples for C#
- Visualizers support for .NET remote debugging
- .NET MAUI tooling for ARM64 devices
- Visual Studio 2022 17.6 Preview 2
- Announcement
- Git stage and commit during build and improved merge dialog
- Breakpoint groups
- Profiler live graph for .NET on WSL
- Android manifest editor
- Visual Studio 2022 17.6
- Announcement
- Performance improvements for solution open, close, git file history, git branch switch, lightbulb actions, performance profiler
- All-in-one search
- New T4 Command-Line Tool for .NET
- Visual Studio 2022 17.7 Preview 1
- Announcement
- Comparing files in Solution Explorer
- Multi-branch graph & git repository improvements
- Copy and trim indentation
- All-in-one search enhancements
- Publish Blazor WebAssembly to Azure Static Web Apps
- Visual Studio 2022 17.7 Preview 2
- Announcement
- Improved file comparisons
- Create a pull request
- Enhanced multi-branch graph
- Parallel Stack filtering
- Enhanced F5 speed
- Optimized editing speed
- Auto-decompilation for external .NET code
- Automatically install and configure WSL from Visual Studio
- Visual Studio 2022 17.7
- Announcement
- Enhanced F5 speed
- Enhanced light bulb performance in C#
- Improve memory consumption in C# spell checker
- Rewrite of dependencies tree in Solution Explorer
- Improved Find in Files search time
- Runaway NuGet restore detection
- ServiceHub - JIT reduction improvement
- Visual Studio 2022 17.8 Preview 1
- Announcement
- Improved Git tooling
- Add reviewers to your PR
- Summary diff view
- Multi-repo limit increase from 10 to 25
- Case preserving find and replace
- .NET Counters tool is now available within the debug diagnostics window
- Code actions for event handler method generation in Razor code
- New React TypeScript and ASP.NET combined templates
- New IntelliTest is now in preview
- Visual Studio 2022 17.8 Preview 2
- Announcement
- Git improvements
- Edit your Pull Request Descriptions with Markdown
- Summary Diff improvements
- GitHub Avatars added to Git Repository Window
- Multi-Repo Activation Setting
- Safe use of secrets when working with HTTP files and HTTP requests
- Recognizing
.vscode/launch.json
files for debugging - F# editor improvements like new code fixes and improved autocompletion
- Debugging and diagnostics improvements
- Cross platform edit and continue / Hot Reload debugging support (Docker, WSL)
- Docker Linux app services with Attach to Process
- Support for BenchmarkDotNet IDiagnosers in Visual Studio Profiler
- .NET counter support for new instruments via Meters API
- Test profiling with VS Profiler
- Enterprise management of VS Installer
- Visual Studio 2022 17.8 Preview 3
- Announcement
- Update notification
- Upgraded Microsoft.Data.SQLClient from 3.0 to 5.0 in SQL Server Data Tools
- Visual Studio 2022 17.8
- Announcement
- GitHub Copilot available as an optional component (requires subscription)
- Create a Pull Request
- Performance enhancements
- Announcement
- Responsive file opening experience
- Improved Razor/Blazor responsiveness
- Enhanced F5 speed
- Build time acceleration for non-SDK style .NET Framework projects
- Improved F# code fixes and autocompletion
- .NET counters supported during debugging sessions
- Visual Studio 2022 17.9 Preview 1
- Announcement
- Generated git commit messages (using GitHub Copilot)
- Event handler leaks insights
- Non-modal debug visualizers
- Instrumentation tool "Start with collection pause" option
- Switch between single and multiple rows in the document well
- .NET/C#
- Automatic deoptimization
- Razor snippets
- Multi-TFM (targeting frawork monikers) support
- Blazor scaffolding for .NET 8 projects
- Extensibility improvements
- vsconfig file support for extensions
- UI refresh preview and tinted themes
- Visual Studio Code
- Visual Studio Code Blog
- Polyglot Notebooks
- C#, F#, PowerShell, JavaScript, HTML, T-SQL
- Announcement
- Claudia Regio: .NET Interactive Notebooks is now Polyglot Notebooks!
- https://vscode.dev/
- Visual Studio Code Server
- C# Dev Kit for Visual Studio Code
- C# extension enhanced - OmniSharp
- IntelliCode for C# Dev Kit
- .NET Runtime Install Tool
- Announcement 1
- Announcement 2
- Scott Hanselman: The C# DevKit is out and gives you a complete .NET experience inside VS Code!
- .NET MAUI extension
- Microsoft Dev Box
- GitHub Codespaces
- Dedicated dev environments
- Press
.
in any GitHub repository in browser, to open in VS Code (https://github.dev/)
- Dev Home
- Dev Drive
- GitHub Copilot
- Documentation
- Announcements and blog posts
- Getting started with OpenAI in .NET by Luis Quintanilla
- Transform your business with smart .NET apps powered by Azure and ChatGPT
- Get started with OpenAI in .NET
- Get started with OpenAI Completions with .NET
- Level up your GPT game with prompt engineering
- Object detection in ML.NET Model Builder
- Getting started with ChatGPT in .NET
- Transform your business with smart .NET apps powered by Azure and ChatGPT
See LICENSE file.