Как исправить предупреждение C# CA1416 в vscode?

Я только начинаю изучать C #, следуя Brackeys на Youtube . После написания я получаю эту проблему в 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
}

Я нашел эту статью Microsoft, в которой говорится об этом предупреждении, но я не понимаю решения, если оно действительно так: (...

У меня есть простая программа, я просто узнаю о классе консоли, меняющем высоту терминала, цвет шрифта и т. Д .:

          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();
    
            }
        }
    }

У кого-нибудь есть идеи, как решить эту проблему?

3 ответа

Решение

Итак, ошибка связана с этой строкой:

      Console.WindowHeight = 40;

Вы пытаетесь установить высоту окна, это метод, украшенный [SupportedOSPlatform("windows")] атрибут.

Чтобы указать приложению выполнять эту строку только в Windows, оберните метод.

      if (OperatingSystem.IsWindows())
{
  Console.WindowHeight = 40;
}

Компилятор распознает это и перестанет выдавать замечание.

Если вы знаете, что разрабатываете только для Windows, вы можете пометить свой код как таковой:

      using System.Runtime.Versioning;

[SupportedOSPlatform("windows")]
class Program
{
    ...
}

Преимущество этого подхода заключается в том, что вы избегаете добавления в код операторов IF для проверки версии ОС.

Вы также можете пометить определенные методы таким образом, если не хотите, чтобы они применялись ко всему классу.

Также см. этот ответ .

Укажите следующие строки в файле проекта:

          <PropertyGroup>
        <TargetFramework>net7.0-windows</TargetFramework>
    </PropertyGroup>
Другие вопросы по тегам