Ian*_*don 4 .net c# asp.net binaryformatter
我已将几个 ASP.Net Core 2.2 项目迁移到 .Net 5,我遇到的最后一个问题是在尝试从项目资源加载位图时出现 System.NotSupported 异常。
RtfUtility.AppendLogo(result, Properties.Resources.Logo);
Run Code Online (Sandbox Code Playgroud)
System.NotSupportedException HResult=0x80131515 Message=BinaryFormatter 在此应用程序中禁用序列化和反序列化。有关详细信息,请参阅https://aka.ms/binaryformatter 。源=System.Runtime.Serialization.Formatters
我没有明确使用BinaryFormatter但奇怪的是,以相同的方式加载二进制 PDF 文件时我没有收到错误:
processor.LoadDocument(new MemoryStream(Properties.Resources.Certificate));
Run Code Online (Sandbox Code Playgroud)
两种机制都使用ResourceManager.GetObject,所以我不确定发生了什么。我知道我可以关闭项目文件中的错误,但这似乎是一个短期解决方案,我宁愿修复它并忘记它。感谢您可以提供的任何建议...
编辑:
堆栈跟踪如下,该错误不是由库引起的,而是在访问资源时引起的。当嵌入或链接图像时会发生这种情况 - 似乎没有什么区别,但对于(二进制)PDF 文件不会发生这种情况。
感谢您查看此...
在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(流序列化流)在System.Resources.ResourceReader。<>c__DisplayClass7_0`1.b__0(对象obj,流流)在System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex) ) 在 System.Resources.ResourceReader._LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode) 在 System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode) 在 System.Resources.ResourceReader.LoadObject(Int32 pos, ResourceTypeCode& typeCode) 在 System.Resources .RuntimeResourceSet.GetObject(字符串键,布尔ignoreCase,布尔isString)在System.Resources.RuntimeResourceSet.GetObject(字符串键,布尔ignoreCase)在System.Resources.ResourceManager.GetObject(字符串名称,CultureInfo文化,布尔wrapUnmanagedMemStream)在System. C:\Development\Project\Project.Infrastruct\Properties\Resources.Designer.cs 中 Project.Infrastruct.Properties.Resources.get_Logo() 处的 Resources.ResourceManager.GetObject(String name, CultureInfo Culture):Project.Infrastruct 处的第 227 行C:\Development\Project\Project.Infrastruct\Models\ShowWording.cs 中的 .Models.ShowWording.Generate():第 146 行
BinaryFormatter 序列化方法已过时,并且在 ASP.NET 应用程序中被禁止。但是,本文没有提及有关resourceReader或其他类的任何内容,即使存在相同的安全警告。
所以我认为这是一个错误。至少我希望文档明确声明不支持二进制资源或任何其他兼容性限制。我会考虑创建一个最小的可重现示例,以确保没有其他奇怪的构建问题导致问题,并发布有关它的错误报告。
请注意,似乎报告了有关 .net core 中的二进制资源的各种问题 ,但我不清楚最终的解决方案是什么。
作为解决方法,可以选择通过将以下内容添加到项目文件来重新启用 .Net 5 asp.Net 应用程序中的二进制格式化程序。
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17032 次 |
| 最近记录: |