Отключение предупреждений компилятора

В Visual Studio можно указать предупреждения, которые нужно отключить, указав коды предупреждений в конструкторе проектов (страницы свойств проекта). Вы также можете отключить предупреждения, задав определенные свойства непосредственно в файле проекта, с помощью командной строки или в коде, если требуется отключить предупреждение только в одном расположении.

Некоторые компиляторы и средства сборки также имеют параметры для указания уровня предупреждения. Это позволяет управлять категориями предупреждений с помощью одного параметра. Для этих параметров см. документацию по конкретному языку и компилятору, который вы используете:

Если ваша цель состоит в том, чтобы увидеть более краткие и ориентированные выходные данные в журнале сборки, может потребоваться изменить детализацию журнала сборки. Доступные параметры : "Обычный", "Подробный" или "Диагностика". Дополнительные сведения о детализации см. в статье Практическое руководство. Просмотр, сохранение и настройка файлов журнала построения.

Внимание

Обратите внимание, что предупреждения предназначены для обозначения потенциальной проблемы с кодом, поэтому следует понимать риски отключения любого конкретного предупреждения. Параметры Visual Studio отключают предупреждения на уровне проекта. Возможно, вам потребуется использовать более целевой подход к отключению предупреждений, чем предоставляет Visual Studio. Большинство компиляторов предоставляют способы отключения предупреждений только для определенных строк кода, чтобы вы могли по-прежнему просматривать предупреждения, если они происходят в другом месте в том же проекте.

Отключение некоторых предупреждений для Visual C# и F#

Используйте свойства сборки для подавления определенных предупреждений для всего проекта C# и F#. Если вы хотите отключить предупреждение только в определенной части кода в C#, используйте предупреждение #pragma. Для F#используйте директиву препроцессора #nowarn , чтобы отключить предупреждение для всего исходного файла.

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

  2. Щелкните правой кнопкой мыши узел проекта и выберите пункт "Свойства " в контекстном меню. Или выберите узел проекта и нажмите клавиши ALT+ВВОД.

  3. Выберите " Сборка" и перейдите в подраздел "Ошибки и предупреждения ".

  4. В поле "Подавление предупреждений" или "Подавление определенных предупреждений" укажите коды ошибок предупреждений, которые необходимо отключить, разделенные точкой с запятой. Список и описание кодов предупреждений см. в разделе "Сообщения компилятора C#".

  5. Заново постройте решение.

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

  2. Щелкните правой кнопкой мыши узел проекта и выберите пункт "Свойства " в контекстном меню. Или выберите узел проекта и нажмите клавиши ALT+ВВОД.

  3. Выберите страницу сборки или раздел, а если вы находитесь в текущем пользовательском интерфейсе, откройте подраздел "Ошибки и предупреждения".

  4. В поле "Подавление предупреждений" или "Подавление определенных предупреждений" укажите коды ошибок предупреждений, которые необходимо отключить, разделенные точкой с запятой. Список и описание кодов предупреждений см. в разделе "Сообщения компилятора C#".

  5. Заново постройте решение.

Примечание.

Некоторые предупреждения нельзя отключить. Список этих элементов см. в разделе NoWarn компилятора.

Отключение некоторых предупреждений для C++

Вы можете отключить предупреждения в проекте C++ с помощью свойств проекта; Страница свойств конфигурации используется для подавления определенных предупреждений для всего проекта C++. Вы также можете отключить предупреждения в определенных файлах с помощью #pragma warning. В этой статье рассматривается элемент управления на уровне проекта, но если вы намерены отключить предупреждение в определенном файле или примерно в нескольких строках кода, но вы хотите продолжать видеть другие вхождения того же предупреждения, следует рассмотреть возможность использования #pragma warning. См . #pragma предупреждение.

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

  2. В строке меню выберите Вид>Страницы свойств.

  3. Выберите категорию Свойства конфигурации, категорию C/C++ и затем — страницу Дополнительно.

  4. Выполните одно из следующих действий.

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

    • В окне Отключить некоторые предупреждения щелкните Изменить, чтобы отобразить дополнительные параметры.

  5. Нажмите кнопку ОК, а затем перестройте решение.

Если предупреждение от другого средства, обратитесь к документации по конкретному инструменту, чтобы узнать, как можно отключить предупреждения для этого средства. Например, компоновщик C++ содержит некоторые предупреждения, которые можно отключить с помощью /IGNORE параметра компоновщика. См. раздел /IGNORE (игнорировать определенные предупреждения) и задать этот параметр, см. раздел /link (Передача параметров для компоновщика).

Отключение предупреждений для Visual Basic

Чтобы скрыть некоторые предупреждения компилятора для Visual Basic, измените VBPROJ-файл проекта. Чтобы отключить предупреждения определенной категории, используйте страницу свойств компилятора. Если вы хотите отключить предупреждение в определенной части файла кода, используйте директивы #Disable и #Enable. Дополнительные сведения см. в статье Настройка предупреждений в Visual Basic.

Подавление определенных предупреждений для всего проекта Visual Basic

В этом примере показано, как отключить отдельные предупреждения компилятора настройками в VBPROJ-файле.

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

  2. В строке меню выберите Проект>Выгрузить проект.

  3. В Обозреватель решений откройте правой кнопкой мыши или контекстное меню проекта, а затем выберите "Изменить <Имя_проекта.vbproj>".

    XML-файл проекта откроется в редакторе кода.

  4. Найдите элемент <NoWarn> в используемой конфигурации сборки и добавьте в элемент <NoWarn> один или несколько номеров предупреждений. Если вы указываете несколько номеров предупреждений, разделяйте их запятыми.

    В следующем примере показан элемент <NoWarn> для конфигурации сборки Debug на платформе x86, который подавляет вывод двух предупреждений компилятора.

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
        <PlatformTarget>x86</PlatformTarget>
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineDebug>true</DefineDebug>
        <DefineTrace>true</DefineTrace>
        <ErrorReport>prompt</ErrorReport>
        <NoWarn>40059,42024</NoWarn>
        <WarningLevel>1</WarningLevel>
      </PropertyGroup>
    

    Примечание.

    По умолчанию проекты .NET Core не содержат группы свойств для конфигурации сборки. Чтобы отключить предупреждения для проекта .NET Core, вручную добавьте нужный раздел конфигурации в файл. Например:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
        <RootNamespace>VBDotNetCore_1</RootNamespace>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <NoWarn>42016,41999,42017</NoWarn>
      </PropertyGroup>
    </Project>
    
  5. Сохраните изменения в VBPROJ-файле.

  6. В строке меню выберите Проект>Перезагрузить проект.

  7. В строке меню последовательно выберите пункты Сборка>Перестроить решение.

    В окне Вывод указанные предупреждения больше не отображаются.

Дополнительные сведения см. в описании параметра компилятора /nowarn для компилятора командной строки Visual Basic.

Отключение предупреждения путем редактирования файла проекта

Использование конструктора свойств Visual Studio для подавления предупреждений приводит к изменению файла проекта. Иногда может быть удобнее вручную редактировать файл проекта, чтобы выполнить задачу отключения предупреждения. Файл проекта обрабатывается MSBuild, подсистемой сборки Майкрософт. См. раздел MSBuild.

Кроме того, в Visual Studio 2019 версии 16.7 и более ранних версиях некоторые предупреждения от средств, отличных от компилятора, нельзя подавлять другим способом.

  1. Чтобы открыть файл проекта в редакторе Visual Studio, щелкните правой кнопкой мыши узел проекта и выберите "Изменить файл проекта". Некоторые типы проектов требуют выгрузки проекта, прежде чем можно изменить файл проекта. Если необходимо выгрузить проект, щелкните правой кнопкой мыши узел проекта и выберите " Выгрузить проект".

  2. В новом PropertyGroup разделе используйте NoWarn свойство. Перечислите ошибки, которые нужно отключить, разделенные запятыми или запятыми. Для предупреждений компилятора можно опустить языковой код и ввести только число, но для ясности рекомендуется использовать полный код. Для предупреждений из других средств в сборке укажите полный код, включая префикс (например MSB , для предупреждений, выданных самим MSBuild).

    Следующий код добавляет предупреждения CS0028 и CS0618 в список отключенных предупреждений:

    <PropertyGroup>
       // Other properties
       <NoWarn>$(NoWarn);CS0028;CS0618</NoWarn>
    </PropertyGroup>
    

    Ссылка на предыдущее значение, как показано в предыдущем примере, добавляет эти числа к любому ранее заданному значению $(NoWarn)NoWarn, а не перезаписи.

См . NoWarn.

Отключение предупреждения из командной строки сборки

Если вы создаете проект из командной строки, вы также можете отключить предупреждения с помощью -warnAsMessage командной строки MSBuild. Используйте кавычки вокруг списков нескольких кодов предупреждений.

MSBuild.exe -warnAsMessage="CS0028;CS0618" MyProject.csproj

См. статью Справочник по командной строке MSBuild.

Подавление предупреждений инструментов

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

С помощью MSBuild 16.8 и более поздних версий в проектах, использующих пакет SDK или стандартный импорт, можно отключить предупреждения средства с помощью описанных ранее методов. Необходимо указать полный код ошибки (включая префикс, например MSB для MSBuild), а не только число, как можно с предупреждением компилятора. Кроме того, сообщение не устранено; он по-прежнему отображается как информационное сообщение, но оно было понижено из предупреждения.

При использовании MSBuild 16.7 и более ранних версий, а также в любом проекте, который не использует пакет SDK или стандартный импорт, эти предупреждения не подавляются с помощью NoWarn. В таких случаях свойство, которое можно использовать для подавления предупреждений MSBuildWarningsAsMessagesинструментов. Вы можете отключить предупреждения сборки, изменив MSBuildWarningsAsMessages файл проекта или указав параметр в командной строке MSBuild. При использовании MSBuildWarningsAsMessagesиспользуйте полный код ошибки MSBuild, включая MSB префикс.

<PropertyGroup>
    <MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3270</MSBuildWarningsAsMessages>
</PropertyGroup>

Обратите внимание, что некоторые предупреждения MSBuild нельзя отключить с помощью параметра MSBuildWarningsAsMessages. Чтобы отключить их, используйте параметр warnAsMessageкомандной строки.

Кроме того, некоторые предупреждения имеют определенные свойства, которые можно настроить для отключения предупреждения. Например, отключается, MSB3253 задав свойство:

 <PropertyGroup>
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
        None
    </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  </PropertyGroup>

По возможности используйте более явное свойство, так как сам код ошибки не так понятен. Эталонная страница ошибки для кода обычно содержит свойство, которое используется для отключения.

Отключение предупреждений для пакетов NuGet

В некоторых случаях может потребоваться отключить предупреждения компилятора NuGet для одного пакета NuGet вместо всего проекта. Возможно, эти предупреждения нужны для конкретной цели, и вы не хотите отключать их на уровне проекта. Например, одно из предупреждений NuGet сообщает о неполной совместимости пакета с проектом. Если вы отключите его на уровне проекта, а затем добавить новый пакет NuGet, вы не сможете узнать о его возможной несовместимости.

Отключение определенных предупреждений для одного пакета NuGet

  1. В обозревателе решений выберите пакет NuGet, для которого вы хотите отключить предупреждения компилятора.

    Screenshot of NuGet package in Solution Explorer.

    Screenshot of NuGet package in Solution Explorer.

  2. Выберите Свойства в контекстном меню или в меню правой кнопки мыши.

  3. В поле "Отключить предупреждения" свойств пакета введите номер предупреждения, который нужно отключить для этого пакета. Если вы намерены отключить несколько предупреждений, разделите их номера запятыми.

    NuGet package properties

    Screenshot of NuGet package properties

    Теперь эти предупреждения исчезнут из обозревателя решений и списка ошибок. В файле проекта задано свойство NoWarn.

     <PackageReference Include="NuGet.Build.Tasks.Pack" Version="6.2.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
       <NoWarn>NU5104</NoWarn>
     </PackageReference>