简体   繁体   中英

How to fix Visual Studio 2022 Warning CA1416 "Call site reachable by all platforms" but "only supported on: 'windows'"?

So I have ac# class library project that I only intend to use on windows. It contains some classes that use the System.Drawing.Image class which is only available on windows. After upgrading to VS2022 and setting the target framework to .NET 6.0 I'm seeing a bunch of warnings that say CA1416 "This call site is reachable on all platforms. 'SomeClass.SomeMethod' is only supported on: 'windows'. See screenshot below for some examples:

在此处输入图片说明

In some sense, it's cool that VS2022 has scanned the library and found all the platform specific code that I'm using in the library. But I'd like to tell VS that I only plan to use the library on windows and it can mute all those warnings.

First I checked the Target Platform options in the properties of the project but didn't seen any windows specific targets.

在此处输入图片说明

Then I decided to edit the project's .csproj directly and changed the Target framework from

<TargetFramework>net6.0</TargetFramework>
to
<TargetFramework>net6.0-windows</TargetFramework>

But sadly even after a recompile, that didn't make the warnings go away either. So then I did some reading on the CA1416 warnings and sure enough it says in the Microsoft Docs that the TFM is ignored for assessing this warning however VS does add an attribute to the project based on the TFM that influences this warning, but it only does so if the project is configured to generate the AssemblyInfo.cs file on the fly. But alas, my project's AssemblyInfo.cs is maintained as a actual file rather then having it auto generated at build time.

So at this point, I'm ready to punt the ball and just disable CA1416 warnings for my project. So in the project's .proj file I added CA1416 for both the release and debug builds like so:

在此处输入图片说明

One would think that would be the end of those pesky warnings. (sigh) As it turns out, after rebuilding the project the warnings still show up. Got any suggestions? I'm all ears.

One way to solve this issue is to create an .editorconfig for the solution and then add the following line to that .editorconfig file:

dotnet_diagnostic.CA1416.severity = none

This will make all "Validate platform compatibility" warnings go away.

Similar to what @RonC did, I was able to solve the problem by adding a Rule to my .ruleset file:

<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">  
  <Rule Id="CA1416" Action="None"/>
</Rules>  

Just keep in mind that this will apply to the whole project for which the ruleset file is used.

I had success removing the CA1416 warnings by adding the following decorator to the top of the containing class:

System.Runtime.Versioning.SupportedOSPlatform("windows")]

I'm only on VS2019 and using .net 5, but it may work for you. I tried this with VS2019 .net5 console project (top of class Program) and a .net5 class library (top of the class). I added the System.Common.Drawing nuget package. My code included:

string inputPath = @"C:\mypath\mypng.png";
Image i = Image.FromFile(inputPath);

You can suppress the warning with dotnet_diagnostic.CA1416.severity = none but imao if you only intend to use it on Windows you should set Target OS to Windows for the project which will fix the warning.

在此处输入图片说明

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

Source:

https://stackoverflow.com/a/70272543/3850405

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