简体   繁体   中英

CA1416 This call site is reachable on all platforms. 'Image.FromStream(Stream)' is only supported on: 'windows'

Upgrading NuGet System.Drawing.Common to 6.0.0 causes the following error:

CA1416 This call site is reachable on all platforms. 'Image.FromStream(Stream)' is only supported on: 'windows'.

https://www.nuget.org/packages/System.Drawing.Common/

The affected code is the following:

var drawingImage = System.Drawing.Image.FromStream(memstr);

We use the library to access the method GetThumbnailImage .

public byte[] GetThumbnailBytes(byte[] imageBytes)
{
    var thumbnailBytes = Array.Empty<byte>();

    using (MemoryStream memstr = new MemoryStream(imageBytes))
    {
        var drawingImage = System.Drawing.Image.FromStream(memstr);
        var thumbnailSize = GetThumbnailSize(drawingImage);

        var thumbnail = drawingImage.GetThumbnailImage(thumbnailSize.Width, thumbnailSize.Height, null, IntPtr.Zero);

        var ms = thumbnail.ToStream(drawingImage.RawFormat);

        thumbnailBytes = ms.ReadFully();
    }

    return thumbnailBytes;
}

We only host the application on Azure so targeting Windows is fine but replacing GetThumbnailImage is acceptable as well.

Reading about the breaking change on Microsoft Docs and that we only target the Windows platform I decided to do the quickest path to victory for the moment and set Target OS to Windows .

在此处输入图像描述

But this code won't warn if the project targets Windows

https://docs.microsoft.com/en-us/dotnet/core/compatibility/code-analysis/5.0/ca1416-platform-compatibility-analyzer

This has been an long open issue

I have got around it by editing my shared assembly info (not autogenerated) with

#if NET6_0
[assembly: System.Runtime.Versioning.SupportedOSPlatform("windows7.0")]
#endif

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM