A few years back, there was massive hype on .NET Core, and everyone believed it was the future, the holy grail of .NET development. I worked on .NET Core because I was forced to. I had been doing Microsoft long enough to know products come and go, and MS changes their mind as fast as they hype technologies. There is even a website that tracks all the products they ended.
A .NET Core alongside .NET Framework seemed more internal politics than technological advancement.
Now they have Blazor, .NET Maui, the no-code PowerApps, and a list of new shiny development technologies. Ahh, no, thank you! Stick with Javascript and HTML, and it will last you a lifetime.
And for that reason, I trust Python and PHP more than any of these web techs of Microsoft.
Over the weekend, I converted all the .NET Core apps I built to .NET 6.0 also known as C#10. Finally, goodbye to that.
I first upgraded my Visual Studio 2019 to Visual Studio 2022 and my codes to run in .NET Framework 6.0. As expected, things started to break from source codes I recently wrote in .NET 4.xx to .NET 5.xx to codes I wrote five years ago.
Why did I upgrade?
It has to do with simply having no choice. I didn’t even read the upgrades and benefits. Microsoft forces you to upgrade by making many of its assemblies obsolete. I had a choice to move to .NET 7.0 from .NET Core 3.1, but since .NET 6.0 is the final unification framework after they no longer support .NET Core, it made sense. Later in this article, I listed all the new features and changes in .NET 6.0, as well as the assemblies that are now obsolete.
First, some of the stuff I encountered as I migrated.
Libman.json errors:
Libman.json errors
Error LIB002 The “twitter-bootstrap@4.4.1” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “bootstrap-datepicker@1.9.0” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “chartist@0.11.4” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “chartist-plugin-legend@0.6.2” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “handlebars.js@4.7.6” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “simple-line-icons@2.4.1” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “typeahead.js@0.11.1” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “jquery@3.4.1” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “jquery-validate@1.19.1” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Error LIB002 The “jquery-validation-unobtrusive@3.2.11” library could not be resolved by the “cdnjs” provider C:\Repos\CSFactory.Portal.Core\libman.json Dofactory.CRM.Core 1
Various Steps to Fix the libman.json
Go to your .NET Command prompt and type the following:
dotnet tool install -g Microsoft.Web.LibraryManager.Cli
Then go to the folder where libman.json is located and run:
libman cache clean
libman restore
I tried the solution above but it did not work. Instead I did the following steps:
Deleted all the libman.json,
Open Nuget Pacakge Manager
Uninstalled Microsoft.Web.LibraryManager.Build
Re-installed Microsoft.Web.LibraryManager.Build to the latest stable build
After the steps above the errors disappeared.
RNGCryptoServiceProvider is obsolete.
//The code below is obsolete and the suggestion was to use
public static string GenerateHashKey(string password, int iterations = 10000, int keyLength = 256)
{
byte[] salt = new byte[16];
using (var rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(salt);
}
var key = new Rfc2898DeriveBytes(password, salt, iterations).GetBytes(keyLength / 8);
return Convert.ToBase64String(key);
}
//The code below is the RandomNumberGenerator
public static string GenerateHashKey(string password, int iterations = 10000, int keyLength = 256)
{
byte[] salt = new byte[16];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(salt);
}
var key = new Rfc2898DeriveBytes(password, salt, iterations).GetBytes(keyLength / 8);
return Convert.ToBase64String(key);
}
Now if you add a new console project you will be greeted with something minimal (see image below)
The new .NET 6.0 is minimal per class. They have a global using concept instead of writing the “using” statement in each file. This also includes the namespace and curly braces. Personally the namespace and curly braces has been there for 20 years and it takes time to get used to see something different when you open a C# file.
Migrating to .NET 6.0 can involve challenges, especially upgrading from a significantly older version. NET. Here are a few common issues that you might encounter during a migration to .NET 6.0:
- Breaking changes: .NET 6.0 includes several breaking changes, such as changes to the default behavior of certain APIs and removing deprecated features. You may need to update your code to address these breaking changes.
- API changes: Some APIs in .NET 6.0 has been changed or replaced. This may require updating your code to use the new APIs.
- NuGet package compatibility: Some NuGet packages may not be compatible with .NET 6.0. You may need to update your packages or find alternative packages that are compatible.
- Runtime changes: .NET 6.0 includes changes to the runtime, including improvements to performance and security. These changes may affect the behavior of your application and require updates to your code.
- Build system changes: .NET 6.0 includes changes to the build system, including introducing the new .NET SDK-style projects. You may need to update your project files to use the new SDK-style format.
To minimize the risks associated with a migration to .NET 6.0, it’s a good idea to thoroughly test your code and ensure that all of your dependencies are compatible with the new version of .NET before you make the switch. You can also consult the .NET 6.0 migration documentation and community resources to help you navigate the migration process.
Here are some of the specific issues that users have reported during the migration to .NET 6.0:
- Compatibility with third-party libraries: Some users have reported issues with compatibility with third-party libraries, particularly those that are not updated to support .NET 6.0.
- Issues with nullable reference types: .NET 6.0 introduces nullable reference types, which can help catch null reference exceptions at compile time. However, some users reported problems with the feature, particularly with existing code that needs to handle null values correctly.
- Changes to ASP.NET Core: .NET 6.0 includes significant changes to ASP.NET Core, including changes to the HTTP request pipeline and removing specific middleware. Users have reported issues with migrating to the new pipeline and needing to update their code to use the new middleware.
- Compatibility with older versions of .NET: Some users have reported issues with compatibility with older versions of .NET, particularly if they are migrating from a significantly older version of the framework.
- Changes to the build system: .NET 6.0 includes changes to the build system, including introducing the new .NET SDK-style projects. Some users have reported issues with migrating to the new project format and needing to update their project files.
- Changes to the .NET runtime: .NET 6.0 includes changes to the runtime, including performance improvements and changes to the garbage collector. Some users have reported issues with the new garbage collector and the need to tune their application for optimal performance.
These are just a few examples of users’ issues while migrating to .NET 6.0. However, it’s worth noting that many users have successfully migrated to the new version of the framework with minimal problems. Nevertheless, if you’re planning to migrate to .NET 6.0, it’s a good idea to thoroughly test your code and dependencies to identify and address any issues before making the switch.
The move to .NET 6.0 is a forced path, but you should know there are many improvements you can benefit from.
C# 10 language update
Here’s a more comprehensive list of the new features and improvements in .NET 6.0, grouped by category:
Performance
- Faster startup times: .NET 6.0 includes several improvements to reduce startup time, including better background work scheduling, faster assembly loading, and improved just-in-time (JIT) compiler performance.
- Improved throughput: .NET 6.0 includes several improvements, including better support for SIMD instructions, improved garbage collection performance, and reduced memory usage.
- Multi-tier compiled applications: .NET 6.0 supports multi-tier compiled applications, which can improve performance by precompiling code across different application tiers.
Productivity
- Hot Reload: .NET 6.0 includes a new Hot Reload feature that enables developers to make changes to their code and see the results immediately without stopping and restarting their application.
- Source Generators: .NET 6.0 supports Source Generators, which enable developers to generate code at compile time, similar to code generation tools like T4.
- Improved debugging: .NET 6.0 includes improvements to the debugging experience, including better support for source links and new APIs for working with debugging information.
- Improved tooling: .NET 6.0 includes several improvements to the development tooling, including better integration with Visual Studio, improved debugging and profiling support, and enhanced command-line tool performance.
Cross-platform development
- .NET MAUI: .NET 6.0 includes the new .NET Multi-platform App UI (MAUI) framework, which enables developers to create cross-platform user interfaces for desktop, web, and mobile applications.
- Improved support for WebAssembly: .NET 6.0 includes improved support for WebAssembly, making it easier to build web applications that can run in the browser.
- Improved support for ARM64: .NET 6.0 has improved the ARM64 architecture, enabling developers to build and run .NET applications on ARM-based devices.
Web development
- HTTP/3 support: .NET 6.0 includes support for the new HTTP/3 protocol, which provides improved performance and reliability over the internet.
- Improved JSON APIs: .NET 6.0 includes new APIs for working with JSON data, including a new JSON serializer that provides better performance and a more straightforward API.
- Improved support for security headers: .NET 6.0 includes improved support for security headers, such as Content Security Policy and X-Frame-Options, which can help protect web applications from common security threats.
- Improved support for authentication and authorization: .NET 6.0 includes improved support for authentication and authorization, including new APIs for working with OAuth 2.0 and OpenID Connect.
Runtime and language improvements
- C# 10: .NET 6.0 includes the latest version of the C# language, which introduces new features like file-scoped namespaces, global using statements, and improved support for interpolated strings.
- F# 6: .NET 6.0 includes the latest version of the F# language, which introduces new features like interpolated strings, better support for pattern matching, and improved performance for certain operations.
- Improved performance tracing: .NET 6.0 includes improvements to the performance tracing APIs, enabling developers to diagnose application performance issues.
- Native-sized integers: .NET 6.0 introduces a new set of integer types that have the same size as the corresponding native types on the target platform. This can improve performance and interoperability with native code.
- Better support for functional programming: .NET 6.0 includes several improvements for available programming, including improved support for tail call optimization and better performance for immutable data structures.
Security
- Improved cryptography: .NET 6.0 includes improvements to the cryptographic libraries, including improved support for secure hashing and encryption algorithms.
- Improved security defaults: .NET 6.0 includes enhanced security defaults, such as requiring HTTPS by default for ASP.NET Core applications and disabling support for weak cryptographic algorithms.
- Enhanced security features for Azure: .NET 6.0 includes improvements to the Azure SDK to provide better security features, such as improved Azure Key Vault support and authentication options.
- Enhanced runtime security features: .NET 6.0 includes enhanced runtime security features to help protect against common security threats, such as buffer overflows and memory corruption.
- Improved support for authentication and authorization: .NET 6.0 includes improved support for authentication and authorization, including new APIs for working with OAuth 2.0 and OpenID Connect.
- Better support for security headers: .NET 6.0 includes improved support for security headers, such as Content Security Policy and X-Frame-Options, which can help protect web applications from common security threats.
Various Improvements
- .NET Upgrade Assistant: The .NET Upgrade Assistant is a new tool that helps developers upgrade their existing .NET Framework applications to .NET 6.0 by identifying and addressing compatibility issues.
- Single-file applications: .NET 6.0 supports creating single-file applications, which package all the application’s code and dependencies into a single executable file, making it easier to deploy and distribute.
- Improved telemetry and diagnostics: .NET 6.0 includes improvements to the telemetry and diagnostics APIs, enabling developers to collect and analyze performance data and diagnose application issues.
- Improved support for Windows Forms and WPF: .NET 6.0 includes improved support for Windows Forms and WPF, making migrating existing desktop applications to .NET Core easier.
- Improved support for Web APIs: .NET 6.0 includes several improvements to the ASP.NET Core web framework, including improved HTTP APIs, better performance, and enhanced support for OpenAPI.
- Improved support for gRPC: .NET 6.0 includes improved support for gRPC, a high-performance, open-source remote procedure call (RPC) framework that enables efficient communication between services.
- New runtime features: .NET 6.0 includes several new runtime features, including new garbage collection modes, improved support for asynchronous I/O, and ARM64-specific features.
C# 10 language update
Here’s a more comprehensive list of the new features and improvements in .NET 6.0, grouped by category:
Performance
- Faster startup times: .NET 6.0 includes several improvements to reduce startup time, including better background work scheduling, faster assembly loading, and improved just-in-time (JIT) compiler performance.
- Improved throughput: .NET 6.0 includes several improvements, including better support for SIMD instructions, improved garbage collection performance, and reduced memory usage.
- Multi-tier compiled applications: .NET 6.0 supports multi-tier compiled applications, which can improve performance by precompiling code across different application tiers.
Productivity
- Hot Reload: .NET 6.0 includes a new Hot Reload feature that enables developers to make changes to their code and see the results immediately without stopping and restarting their application.
- Source Generators: .NET 6.0 supports Source Generators, which enable developers to generate code at compile time, similar to code generation tools like T4.
- Improved debugging: .NET 6.0 includes improvements to the debugging experience, including better support for source links and new APIs for working with debugging information.
- Improved tooling: .NET 6.0 includes several improvements to the development tooling, including better integration with Visual Studio, improved debugging and profiling support, and enhanced command-line tool performance.
Cross-platform development
- .NET MAUI: .NET 6.0 includes the new .NET Multi-platform App UI (MAUI) framework, which enables developers to create cross-platform user interfaces for desktop, web, and mobile applications.
- Improved support for WebAssembly: .NET 6.0 includes improved support for WebAssembly, making it easier to build web applications that can run in the browser.
- Improved support for ARM64: .NET 6.0 has improved the ARM64 architecture, enabling developers to build and run .NET applications on ARM-based devices.
Web development
- HTTP/3 support: .NET 6.0 includes support for the new HTTP/3 protocol, which provides improved performance and reliability over the internet.
- Improved JSON APIs: .NET 6.0 includes new APIs for working with JSON data, including a new JSON serializer that provides better performance and a more straightforward API.
- Improved support for security headers: .NET 6.0 includes improved support for security headers, such as Content Security Policy and X-Frame-Options, which can help protect web applications from common security threats.
- Improved support for authentication and authorization: .NET 6.0 includes improved support for authentication and authorization, including new APIs for working with OAuth 2.0 and OpenID Connect.
Runtime and language improvements
- C# 10: .NET 6.0 includes the latest version of the C# language, which introduces new features like file-scoped namespaces, global using statements, and improved support for interpolated strings.
- F# 6: .NET 6.0 includes the latest version of the F# language, which introduces new features like interpolated strings, better support for pattern matching, and improved performance for certain operations.
- Improved performance tracing: .NET 6.0 includes improvements to the performance tracing APIs, enabling developers to diagnose application performance issues.
- Native-sized integers: .NET 6.0 introduces a new set of integer types that have the same size as the corresponding native types on the target platform. This can improve performance and interoperability with native code.
- Better support for functional programming: .NET 6.0 includes several improvements for available programming, including improved support for tail call optimization and better performance for immutable data structures.
Security
- Improved cryptography: .NET 6.0 includes improvements to the cryptographic libraries, including improved support for secure hashing and encryption algorithms.
- Improved security defaults: .NET 6.0 includes enhanced security defaults, such as requiring HTTPS by default for ASP.NET Core applications and disabling support for weak cryptographic algorithms.
- Enhanced security features for Azure: .NET 6.0 includes improvements to the Azure SDK to provide better security features, such as improved Azure Key Vault support and authentication options.
- Enhanced runtime security features: .NET 6.0 includes enhanced runtime security features to help protect against common security threats, such as buffer overflows and memory corruption.
- Improved support for authentication and authorization: .NET 6.0 includes improved support for authentication and authorization, including new APIs for working with OAuth 2.0 and OpenID Connect.
- Better support for security headers: .NET 6.0 includes improved support for security headers, such as Content Security Policy and X-Frame-Options, which can help protect web applications from common security threats.
Various Improvements
- .NET Upgrade Assistant: The .NET Upgrade Assistant is a new tool that helps developers upgrade their existing .NET Framework applications to .NET 6.0 by identifying and addressing compatibility issues.
- Single-file applications: .NET 6.0 supports creating single-file applications, which package all the application’s code and dependencies into a single executable file, making it easier to deploy and distribute.
- Improved telemetry and diagnostics: .NET 6.0 includes improvements to the telemetry and diagnostics APIs, enabling developers to collect and analyze performance data and diagnose application issues.
- Improved support for Windows Forms and WPF: .NET 6.0 includes improved support for Windows Forms and WPF, making migrating existing desktop applications to .NET Core easier.
- Improved support for Web APIs: .NET 6.0 includes several improvements to the ASP.NET Core web framework, including improved HTTP APIs, better performance, and enhanced support for OpenAPI.
- Improved support for gRPC: .NET 6.0 includes improved support for gRPC, a high-performance, open-source remote procedure call (RPC) framework that enables efficient communication between services.
- New runtime features: .NET 6.0 includes several new runtime features, including new garbage collection modes, improved support for asynchronous I/O, and ARM64-specific features.
These are just a few new features and improvements introduced in .NET 6.0. With each release of .NET, Microsoft continues to add new features and enhancements to make it easier for developers to build high-performance, cross-platform applications.
List of the assemblies that have been marked as obsolete in .NET 6.0:
- System.Configuration.Install: This assembly supports installing and uninstalling Windows services and COM components. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use PowerShell scripts or other deployment tools instead.
- System.Drawing.Common: This assembly provides support for working with graphics and images. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the System.Drawing namespace in .NET Core instead.
- System.Drawing.Imaging: This assembly supports working with various image formats, such as JPEG and PNG. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the System.Drawing namespace in .NET Core instead.
- System.Drawing.Printing: This assembly provides support for printing graphics and images. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the System.Printing namespace instead.
- System.Drawing.Text: This assembly provides support for working with fonts and text. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the System.Drawing namespace in .NET Core instead.
- System.EnterpriseServices: This assembly supports building distributed, transactional applications using COM+. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use WCF or ASP.NET Core for building distributed applications.
- System.IdentityModel.Selectors: This assembly supports selecting security tokens for use in authentication and authorization. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use Microsoft.IdentityModel.Tokens namespace instead.
- System.IdentityModel.Services: This assembly supports building claims-aware applications using WS-Federation and SAML. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the Microsoft.Identity.Web or AspNet.Security.OpenIdConnect.Server libraries instead.
- System.Management: This assembly supports working with Windows Management Instrumentation (WMI). In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use PowerShell scripts or other management tools instead.
- System.Messaging: This assembly supports working with Message Queuing (MSMQ). In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use other message queue solutions, such as RabbitMQ or Azure Service Bus, instead.
- System.Runtime.Caching: This assembly provides support for caching data in memory. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the Microsoft.Extensions.Caching.Memory namespace in ASP.NET Core instead.
- System.Runtime.Remoting: This assembly provides support for building distributed applications using remoting. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use WCF or ASP.NET Core for building distributed applications.
- System.Security.Cryptography.CryptoConfig: This assembly provides support for configuring cryptographic algorithms and providers. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the System.Security.Cryptography.Xml.SignedXml class in the System.Security.Cryptography.Xml namespace instead. The SignedXml class provides similar functionality for working with XML digital signatures and encryption. System.Security.Cryptography namespace in .NET Core instead.
- System.Security.Cryptography.Xml: This assembly supports working with XML digital signatures and encryption. In .NET 6.0, this assembly has been marked as obsolete, and developers are
- System.ServiceModel: This assembly provides support for building WCF services. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use ASP.NET Core Web API or gRPC for building web services.
- System.ServiceModel.Web: This assembly provides support for building RESTful web services with WCF. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use ASP.NET Core Web API instead.
- System.ServiceProcess: This assembly provides support for building Windows services. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the Microsoft.Extensions.Hosting.WindowsServices namespace in ASP.NET Core instead.
- System.Transactions: This assembly provides support for building transactional applications. In .NET 6.0, this assembly has been marked as obsolete, and developers are encouraged to use the Microsoft.Data.SqlClient namespace for working with SQL Server transactions.
List of changes for .NET 6.0 (Source Microsoft)
ASP.NET Core
Containers
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
Default console logger formatting in container images | ✔️ | ❌ | Servicing 6.0.6 |
For information on other breaking changes for containers in .NET 6, see .NET 6 Container Release Notes.
Core .NET libraries
Cryptography
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
CreateEncryptor methods throw exception for incorrect feedback size | ❌ | ✔️ | Preview 7 |
Deployment
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
x86 host path on 64-bit Windows | ✔️ | ✔️ | Servicing release |
Entity Framework Core
Extensions
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
AddProvider checks for non-null provider | ✔️ | ❌ | RC 1 |
FileConfigurationProvider.Load throws InvalidDataException | ✔️ | ❌ | RC 1 |
Repeated XML elements include index | ❌ | ✔️ | |
Resolving disposed ServiceProvider throws exception | ✔️ | ❌ | RC 1 |
Globalization
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
Culture creation and case mapping in globalization-invariant mode | Preview 7 |
Interop
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
Static abstract members in interfaces | ❌ | ✔️ | Preview 7 |
JIT compiler
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
Coerce call arguments according to ECMA-335 | ✔️ | ✔️ | Preview 1 |
Networking
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
Port removed from SPN for Kerberos and Negotiate | ❌ | ✔️ | RC 1 |
WebRequest, WebClient, and ServicePoint are obsolete | ✔️ | ❌ | Preview 1 |
SDK
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
-p option for dotnet run is deprecated | ✔️ | ❌ | Preview 6 |
C# code in templates not supported by earlier versions | ✔️ | ✔️ | Preview 7 |
EditorConfig files implicitly included | ✔️ | ❌ | |
Generate apphost for macOS | ✔️ | ❌ | Preview 6 |
Generate error for duplicate files in publish output | ❌ | ✔️ | Preview 1 |
GetTargetFrameworkProperties and GetNearestTargetFramework removed from ProjectReference protocol | ❌ | ✔️ | Preview 1 |
Install location for x64 emulated on Arm64 | ✔️ | ❌ | RC 2 |
MSBuild no longer supports calling GetType() | RC 1 | ||
OutputType not automatically set to WinExe | ✔️ | ❌ | RC 1 |
Publish ReadyToRun with –no-restore requires changes | ✔️ | ❌ | 6.0.100 |
runtimeconfig.dev.json file not generated | ❌ | ✔️ | 6.0.100 |
RuntimeIdentifier warning if self-contained is unspecified | ✔️ | ❌ | RC 1 |
Version requirements for .NET 6 SDK | ✔️ | ✔️ | 6.0.300 |
.version file includes build version | ✔️ | ✔️ | 6.0.401 |
Write reference assemblies to IntermediateOutputPath | ❌ | ✔️ | 6.0.200 |
Serialization
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
DataContractSerializer retains sign when deserializing -0 | ❌ | ✔️ | Servicing 6.0.11 |
Default serialization format for TimeSpan | ❌ | ✔️ | Servicing 6.0.2 |
IAsyncEnumerable serialization | ✔️ | ❌ | Preview 4 |
JSON source-generation API refactoring | ❌ | ✔️ | RC 2 |
JsonNumberHandlingAttribute on collection properties | ❌ | ✔️ | RC 1 |
New JsonSerializer source generator overloads | ❌ | ✔️ | Preview 6 |
Windows Forms
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
C# templates use application bootstrap | ✔️ | ❌ | RC 1 |
Selected TableLayoutSettings properties throw InvalidEnumArgumentException | ❌ | ✔️ | Preview 1 |
DataGridView-related APIs now throw InvalidOperationException | ❌ | ✔️ | Preview 4 |
ListViewGroupCollection methods throw new InvalidOperationException | ❌ | ✔️ | RC 2 |
NotifyIcon.Text maximum text length increased | ❌ | ✔️ | Preview 1 |
ScaleControl called only when needed | ✔️ | ❌ | Servicing 6.0.101 |
Some APIs throw ArgumentNullException | ❌ | ✔️ | Preview 1-4 |
TreeNodeCollection.Item throws exception if node is assigned elsewhere | ❌ | ✔️ | Preview 1 |
XML and XSLT
Title | Binary compatible | Source compatible | Introduced |
---|---|---|---|
XmlDocument.XmlResolver nullability change | ❌ | ✔️ | RC 1 |
XNodeReader.GetAttribute behavior for invalid index | ✔️ | ❌ | Preview 2 |