[.NET 9] PlatformNotSupportedException: BinaryFormatter serialization and deserialization have been removed

Vote:
 

Hello Guys,

As you guys aware, .NET 9 has been released yesterday. We tried upgrading our client projects and were able to run without any issues until I was on older version of CMS (12.21.7) and Commerce (14.23.0). As soon as I upgraded to latest version of Episerver packages it throws following error. 

EPiServer.Framework.Initialization.InitializationException
  HResult=0x80131500
  Message=Initialize action failed for Initialize on class EPiServer.Initialization.Internal.ModelSyncInitialization, EPiServer, Version=12.22.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7
  Source=EPiServer.Framework
  StackTrace:
   at EPiServer.Framework.Initialization.InitializationEngine.InitializeModules()
   at EPiServer.Framework.Initialization.InitializationEngine.ExecuteTransition(Boolean continueTransitions)
   at EPiServer.Framework.Initialization.InitializationEngine.Initialize()
   at EPiServer.Hosting.Internal.EPiServerFrameworkHost.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.Internal.Host.<<StartAsync>b__14_1>d.MoveNext()
   at Microsoft.Extensions.Hosting.Internal.Host.<ForeachService>d__17`1.MoveNext()
   at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>d__14.MoveNext()
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at Dolby.Web.Website.Program.Main(String[] args) in C:\Data\Projects\**********\Program.cs:line 55

  This exception was originally thrown at this call stack:
    [External Code]

Inner Exception 1:
PlatformNotSupportedException: BinaryFormatter serialization and deserialization have been removed. See https://aka.ms/binaryformatter for more information.
#332860
Edited, Nov 13, 2024 21:30
Vote:
 

Update: I restarted the upgrade and followed the sequence below and was able to make it work until I upgraded CMS but as soon as I upgraded Commerce, it started throwing error. So the issue is not with EPiserver Framework version but Commerce version.

  • Upgrade EPiServer Find related packages - No issue
  • Upgrade TinyMce and EPiServer Forms - No issue
  • Upgrade EPiServer ServiceAPI and ImageSharp - No issue
  • Upgrade EPiServer and AspnetCore packages from 12.21.7 to 12.22.0 - No issue
  • Upgrade Commerce.UI+Personalization.Commerce+Tracking.Commerce from 14.23 to 14.28 - No issue
  • Upgrade Commerce 14.28.0 to 14.29.0 = Failed with above error
#332910
Edited, Nov 14, 2024 4:26
Vote:
 

Thanks for the report. We are aware Commerce has an old dependency to BinaryFormatter. We know how to remove the dependency but it is some work, especially doing it without breaking changes. I have brought this up for prioritization again, but for now Commerce can only run on .NET 8.

#332911
Nov 14, 2024 7:36
Vote:
 

Thanks @Magnus. 

After failing to make it work with 14.29.0 I tested following two scenarios. Sharing in case someone else encounters and it may help them.

  • If you upgrade from 14.29.0 to 14.30.0 the solution loads without any error.
  • If you upgrade directly from older version of Commerce to 14.30.0, it fails to load the site with expected BinaryFormatter error. 

Conclusion: We will use .NET 8 for the time being. 

#332917
Edited, Nov 14, 2024 15:27
Vote:
 

I noticed too that I sometimes got an error already in startup, in another project I didn't. But you will get an error as soon as you publish a product update (or price update etc). So it is not currently usable on .NET 9.

#332918
Nov 14, 2024 15:29
Vote:
 

There is an official compatibility package available on NuGet: https://www.nuget.org/packages/System.Runtime.Serialization.Formatters

It enabled us to use CMS 12 with .NET 9. But it's great to hear that Optimizely is working on replacing BinaryFormatter with something modern and more secure!

#332980
Nov 15, 2024 13:06
Sujit Senapati - Nov 15, 2024 14:53
You are right. However, Microsoft recommended against it as BinaryFormatter has serious security risks and it is an unsupported package. If someone is upgrading to .NET 9 and cant wait then it can be beneficial but if you can wait, it is recommended to not use the unsupported package.
Vote:
 

Oh, really? Surprised it works as a drop-in replacement without any changes to our code. Thanks for the tip!

We're going to rip it out anyway I think, it isn't actually needed for anything, it is a legacy to send remote events from the time when there was a separate Content Manager application. We can solve the same thing using regular in-process events now.

#332981
Nov 15, 2024 13:09
Vote:
 

Hi

Has anyone tested with placing an order? I received "Type provided must be an Enum" exception from calling OrderRepository Save method

  System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
       ---> System.ArgumentException: Type provided must be an Enum.
         at System.ComponentModel.EnumConverter..ctor(Type type)
         at Mediachase.Commerce.Shared.ResourceEnumConverter..ctor(Type type)
         at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
         at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
         --- End of inner exception stack trace ---
         at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
         at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
         at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
         at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
         at System.ComponentModel.ReflectTypeDescriptionProvider.CreateInstance(Type objectType, Type callingType)
         at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetConverter(Object instance, Boolean verifyIsRegisteredType)
         at System.ComponentModel.TypeDescriptor.DefaultTypeDescriptor.GetConverter()
         at System.ComponentModel.TypeDescriptor.GetConverter(Type type)
         at Newtonsoft.Json.Serialization.JsonTypeReflector.CanTypeDescriptorConvertString(Type type, TypeConverter& typeConverter)
         at Newtonsoft.Json.Serialization.DefaultContractResolver.CanConvertToString(Type type)
         at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)
         at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
         at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
         at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
         at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
         at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
         at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
         at EPiServer.Commerce.Order.Internal.DataAccess.SerializableCartDB.Save(SerializableCart cart)
         at EPiServer.Commerce.Order.Internal.SerializableCartProvider.Save(ICart cart)
         at EPiServer.Commerce.Order.Internal.DefaultOrderRepository.Save(IOrderGroup order)
#333335
Nov 23, 2024 4:01
Sujit Senapati - Nov 23, 2024 4:06
With .NET 9 there has been change in how Enum Flags work. Here is the link. https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/9.0/enumconverter

Wait for Opti team to officially support the version until you use .NET 9.
Vote:
 

Bumping this. Does anyone know if commerce works with .NET 9 (or newer) yet?

#341819
Mar 02, 2026 9:54
Vote:
 

I second to Andreas post - the .NET 8 end of support is 10th of November 2026.
https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core

We can safely assume that CMS 13 and Commerce 15 will support .NET 10 when they will be released, but I don't think all current projects will migrate to 13/15 before November, so some plan must exist for existing projects, but we didn't get anywhere clear communitcation in this regard.

#341887
Mar 10, 2026 11:38
Vote:
 

We understand the situation. Our focus now is 100% getting CMS 13 and Commerce 15 to .NET 10 support first, as the preferred path. But we are going to validate .NET 10 compatibility in CMS 12 after CMS 13 is released. How that turns out also affects the plan for Commerce 14 vs .NET 10. But in the Commerce case we know we have to make changes to the BinaryFormatter usage. Those are technically going to be breaking, but we'll do our best to find a pragmatic path forward there even though it might not be technically correct versioning wise or particularly clean on upgrades (the dependency version range between Commerce.Core and Find.Commerce which uses the BinaryFormatter based event channel is the known challenge, then there may be more yet unknown challenges).

#341914
Mar 12, 2026 8:21
Vote:
 

Thanks for the update, Magnus — it's good to hear this is on the radar.

That said, the BinaryFormatter dependency was identified in November 2024, and with .NET 8 reaching end of support in November 2026, the remaining time is getting quite short. I understand the focus on CMS 13 / Commerce 15 for .NET 10, but for teams running CMS 12 / Commerce 14 in production, we seem to be left on unsupported runtime.
It's a very different situation to Commerce 13, where the .NET Framework is still supported by Microsoft.
Is there any indication that the Commerce 14 would support .NET 10 before November?

#341936
Mar 12, 2026 16:26
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.