Поделиться через


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

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

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

  • уровни предупреждений в C#
  • уровни предупреждений В C++

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

Осторожность

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

Подавление конкретных предупреждений для Visual C# или F#

Используйте свойства сборки для подавления определенных предупреждений для всего проекта C# и F#. Если вы хотите отключить предупреждение только в конкретной части кода в C#, используйте #pragma warning. Для 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++, а затем страницу Advanced.

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

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

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

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

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

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

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

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

В этом примере показано, как изменить файл .vbproj для подавления определенных предупреждений компилятора.

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

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

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

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

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

    В следующем примере показан элемент <NoWarn> для конфигурации сборки отладки на платформе 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. В строке меню выберите Project>Перезагрузить проект.

  7. В строке меню выберите Сборка>Перестроение Решения.

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

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

Вы можете отключить предупреждения для отдельных предупреждений или по категориям. Интерфейс отличается в зависимости от того, работаете ли вы с проектом .NET Framework или проектом .NET Core (или .NET 5 и более поздних версий).

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

Проекты .NET 5 или более поздних версий

Вы можете изменить файл проекта, чтобы отключить определенные предупреждения компилятора с помощью диагностических кодов или отключить предупреждения по категориям с помощью конструктора проектов. Чтобы открыть конструктор проектов, выберите узел проекта, щелкните правой кнопкой мыши и выберите Свойства, или нажмите Alt+ВВОД.

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

снимок экрана: параметр серьезности предупреждений для проекта .NET Visual Basic.

Проекты .NET Framework

Вы можете скрыть определенные предупреждения компилятора для Visual Basic, изменив файл .vbproj проекта. Чтобы отключить предупреждения по категории , можно использовать страницу свойств компиляции .

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

В этом примере показано, как изменить файл .vbproj для подавления определенных предупреждений компилятора.

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

  2. (.NET) Дважды щелкните по узлу проекта, чтобы открыть файл проекта.

    (.NET Framework) В строке меню выберите Project>Выгрузить проект. Затем в обозревателе решенийоткройте правой кнопкой мыши или контекстное меню проекта, а затем выберите Изменить <Имя проекта>.vbproj.

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

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

    В следующем примере показан элемент <NoWarn> для сборочной конфигурации отладки на платформе 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 5 и более поздних версий не содержат групп свойств конфигурации сборки по умолчанию. Чтобы отключить предупреждения в проекте .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>
    
  4. Сохраните изменения в файле .vbproj.

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

  6. В строке меню выберите Сборка>Перестроение решения.

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

Дополнительные сведения см. в разделе параметр компилятора /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 Directory.Build.props. См. раздел Настройка сборок по каталогу. Например, если поместить следующий файл Directory.Build.props в корне папки с множеством решений и проектов, можно отключить указанный список предупреждений для всех проектов в этой папке и рекурсивно к папкам в ней.

<Project>
   <PropertyGroup>
      <NoWarn>$(NoWarn);CS0028;CS0618</NoWarn>
   </PropertyGroup>
</Project>

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

Как вы подавляете предупреждения от средств, отличных от компилятора, например 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, для которого нужно отключить предупреждения компилятора.

    снимок экрана пакета NuGet в обозревателе решений.

    снимок экрана пакета NuGet в обозревателе решений.

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

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

    свойства пакета NuGet

    снимок экрана со свойствами пакета NuGet

    Предупреждение исчезает из обозревателя решений и списка ошибок. В файле проекта задано свойство 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>
    

Подавление предупреждений анализа кода

Диагностические сообщения с кодами, начинающимися с CA, являются нарушениями и предупреждениями анализа кода, которые отличаются от предупреждений компилятора, рассмотренных в этой статье. Предупреждения анализа кода можно подавлять различными способами, включая использование разметки для конкретного сайта и проекта или глобально с помощью файлов конфигурации правил. ** См. предотвращение предупреждений анализаторов кода и подавления нарушений анализа кода.