如何修复 vscode 中的 C# 警告 CA1416?

Jay*_*zor 3 c# visual-studio-code

我刚刚开始在Youtube 上跟随Brackeys学习C#。在编写时,我在 vscode 中弹出了这个问题:

{
"resource": "/d:/OneDrive/Programming/Youtube/brackeys/How To Program In C#/Basics/Program.cs",
"owner": "msCompile",
"code": "CA1416",
"severity": 4,
"message": "This call site is reachable on all platforms. 'Console.WindowHeight.set' is only supported on: 'windows'. [D:\\OneDrive\\Programming\\Youtube\\brackeys\\How To Program In C#\\Basics\\Basics.csproj]",
"startLineNumber": 11,
"startColumn": 13,
"endLineNumber": 11,
"endColumn": 13
}
Run Code Online (Sandbox Code Playgroud)

我发现这篇微软文章在谈论这个警告,但我不明白解决方案是否真的是这样:(...

我有一个简单的程序,只是了解控制台类更改终端高度和字体颜色等:

    using System;
    
    namespace Basics
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Title = "Skynet";
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WindowHeight = 40;
    
                Console.WriteLine();
    
                Console.ReadKey();
    
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何解决这个问题?

Taw*_*kil 27

如果您知道自己只针对 Windows 进行开发,则可以将代码标记为:

using System.Runtime.Versioning;

[SupportedOSPlatform("windows")]
class Program
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是您可以避免在代码中添加 IF 语句来检查操作系统版本。

如果您不希望它应用于整个类,您也可以通过这种方式标记特定方法。

或者警告可能会提到特定的操作系统版本,如下所示:

“程序”仅在“Windows”7.0 及更高版本上受支持。

在这种情况下,您可以指定版本:

[SupportedOSPlatform("windows7.0")]
Run Code Online (Sandbox Code Playgroud)

另见这个问题

  • 更改“项目属性”中的***目标操作系统***(控制台、REST API,...)? (4认同)

小智 10

所以错误是关于这一行:

Console.WindowHeight = 40;
Run Code Online (Sandbox Code Playgroud)

你尝试设置Window Height,这是一个用[SupportedOSPlatform("windows")]属性修饰的方法。

为了告诉应用程序仅在 Windows 包装方法时执行这一行。

if (OperatingSystem.IsWindows())
{
  Console.WindowHeight = 40;
}
Run Code Online (Sandbox Code Playgroud)

编译器将识别出这一点并停止抛出该评论。


Yur*_*hov 6

在项目文件中指定以下行:

    <PropertyGroup>
        <TargetFramework>net7.0-windows</TargetFramework>
    </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 这并不能修复警告,至少不使用“net6.0-windows” (2认同)
  • [此处](https://github.com/dotnet/roslyn-analyzers/issues/4983#issuecomment-852738069) 是这可能无法修复警告的原因之一。简而言之,要么 AssemblyInfo 必须由编译器生成,要么必须手动添加“SupportedOSPlatform”属性。 (2认同)