我有一个用 VB.NET 编写的个人学校项目。在此之前,我使用的框架是.NET Framework 4.7。然后,我决定将其升级到 .NET 8,因为我需要其中的 DPI 感知功能。但现在我无法打开任何表单设计器并出现此错误。
Type 'System.IO.MemoryStream' in Assembly 'System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' is not marked as serializable.
这是调用堆栈:
在 StreamJsonRpc.JsonRpc.d_154'1.MoveNext( --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw( 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.DotNet.DesignTools.Client.Host.ServerHost.d_16.MoveNext( --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw( 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.DotNet.DesignTools.Client.DesignToolsClientLoader.d_29.MoveNext( --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.DotNet.DesignTools.Client.DesignToolsClientLoader .< >c_DisplayClass25_1 .<<- ctor>b_1>d.MoveNext( --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.DotNet.DesignTools.Client.DesignToolsClientLoader.d_27.MoveNext(
在此之前我一直在做一些研究。我尝试的一种解决方法是将所有项目文件(表单、资源等)从旧解决方案移动到新解决方案。如果我只移动一些表单(设计器将加载),它就会起作用。但是,当我移动所有表格时,同样的错误再次弹出。我显然对这个问题一无所知。
任何帮助将不胜感激。谢谢!
某些类型(例如 MemoryStream)在 .NET 8 中未标记为 [Serializable],这可能会破坏与需要序列化的组件的兼容性。
检查您的表单和自定义类中是否有可能隐式需要序列化的代码,尤其是当它们使用不可序列化类型(如 MemoryStream)时。将 MemoryStream 转换为字节数组(使用 MemoryStream.ToArray() 或 MemoryStream.GetBuffer())。然后,传递这个字节数组而不是 MemoryStream 本身。