我已將幾個 ASP.Net Core 2.2 專案遷移到 .Net 5,我遇到的最后一個問題是在嘗試從專案資源加載位圖時遇到 System.NotSupported 例外。
RtfUtility.AppendLogo(result, Properties.Resources.Logo);
System.NotSupportedException HResult=0x80131515 Message=BinaryFormatter 序列化和反序列化在此應用程式中被禁用。有關更多資訊,請參閱https://aka.ms/binaryformatter。源 = System.Runtime.Serialization.Formatters
我沒有明確使用BinaryFormatter但奇怪的是,在以相同的方式加載二進制 PDF 檔案時我沒有收到錯誤訊息:
processor.LoadDocument(new MemoryStream(Properties.Resources.Certificate));
這兩種機制都使用ResourceManager.GetObject,所以我不確定發生了什么。我知道我可以關閉專案檔案中的錯誤,但這似乎是一個短期解決方案,我寧愿修復它并忘記它。感謝您提供的任何建議...
編輯:
堆疊跟蹤如下,錯誤不是由庫引起的,而是在訪問資源時。它發生在嵌入或鏈接影像時 - 似乎沒有區別,但不會發生在(二進制)PDF 檔案中。
謝謝你看這個...
在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) 在 System.Resources.ResourceReader.<>c__DisplayClass7_0`1.b__0(Object obj, Stream stream) 在 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(String key, Boolean ignoreCase, Boolean isString) at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase) at System.Resources.ResourceManager.GetObject(String name, CultureInfoculture, Boolean wrapUnmanagedMemStream) at System.資源。ResourceManager.GetObject(String name, CultureInfo culture) at Project.Infrastructure.Properties.Resources.get_Logo() in C:\Development\Project\Project.Infrastructure\Properties\Resources.Designer.cs:line 227 at Project.Infrastructure.Models .ShowWording.Generate() 在 C:\Development\Project\Project.Infrastructure\Models\ShowWording.cs:line 146
uj5u.com熱心網友回復:
BinaryFormatter 序列化方法已過時并且在 ASP.NET 應用程式中被禁止。但是,即使適用相同的安全警告,文章也沒有提及resourceReader或其他類。
所以我認為這是一個錯誤。至少我希望檔案明確宣告不支持二進制資源或任何其他兼容性限制。我會考慮創建一個最小的可重現示例,以確保沒有其他奇怪的構建問題導致該問題,并發布有關它的錯誤報告。
請注意,似乎有關于 .net core 中的二進制資源報告的各種問題 ,但我不清楚最終的解決方案是什么。
作為一種解決方法,可以通過將以下內容添加到專案檔案中來重新啟用 .Net 5 asp.Net 應用程式中的 binaryformatter。
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
uj5u.com熱心網友回復:
我找到了一個沒有意義的解決方法,但我相信它而不是在我的專案中允許不安全的二進制格式化程式。
根據您的建議,我嘗試洗掉并重新創建資源檔案,洗掉并重新添加受影響的影像,但沒有任何效果。
因此,由于讀取 pdf 檔案有效,我從影像中洗掉了 .png 擴展名并將其保存為檔案資源。
我現在可以從資源中以二進制形式讀取它并將其轉換為 Bitmap 并且它作業正常。
using (var ms = new MemoryStream(Properties.Resources.LogoBinary))
{
return new Bitmap(ms);
}
我不敢相信這是框架中的一個錯誤,因為它會影響很多人,它一定是我的專案所特有的,但奇怪的是我在讀取影像時收到 BinaryFormatter 例外,而不是 Binary檔案...
感謝大家的指導和幫助...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347545.html
標籤:c# asp.net .net binaryformatter
