共用方式為


隱藏編譯程式警告

使用 Visual Studio,您可以藉由在項目設計工具 (專案屬性頁) 中指定警告碼,以指定您想要隱藏的警告。 您也可以藉由直接在項目檔、命令行或程式代碼中設定特定屬性來隱藏警告,以便只隱藏一個位置中的警告。

某些編譯程式和建置工具也有指定警告層級的選項。 這可讓您使用一個設定來控制警告的類別。 如需這些選項,請參閱您使用的特定語言和編譯程序檔:

  • 在 C# 警告層級
  • C++ 中的 警告層級

如果您的目標是在建置紀錄中看到更簡潔且更聚焦的輸出,您可能會想要變更建置紀錄的詳細程度。 可用的設定為 標準詳細診斷。 如需了解詳盡訊息,請參閱 如何:檢視、儲存及設定建置記錄檔

謹慎

請注意,警告是要指出程式碼的潛在問題,因此您應該瞭解停用任何特定警告的風險。 Visual Studio 設定會停用專案層級的警告。 您可能想要使用更有針對性的方法來停用 Visual Studio 所提供的警告。 大部分的編譯程式都提供方法,只針對特定程式代碼行停用警告,因此,如果警告發生在相同專案中的其他地方,您仍然可以檢閱這些警告。

抑制 Visual C# 或 Visual F# 的特定警告

使用 組建 屬性來隱藏整個 C# 和 F# 專案的特定警告。 如果您想要只在 C# 中特定部份隱藏警告,請使用 #pragma 警告。 針對 F#,請使用 #nowarn 預處理器指令來停用整個原始程式碼檔案的警告。

  1. [方案總管]中,選擇您要隱藏警告的專案。

  2. 以滑鼠右鍵點擊專案節點,然後在快捷功能表上選擇 [屬性]。 或者,選取項目節點,然後按 Alt+Enter

  3. 選擇 [建置 ],然後移至 [錯誤和警告] 小節。

  4. 在 [隱藏警告隱藏特定警告 方塊中,指定您要隱藏的警告錯誤碼,並以分號分隔。 如需警告碼的清單和描述,請參閱 C# 編譯程式訊息

  5. 重建解決方案。

  1. [方案總管]中,選擇您要隱藏警告的專案。

  2. 以滑鼠右鍵點擊項目節點,然後在選單上選擇 [屬性]。 或者,選取項目節點,然後按 Alt+Enter

  3. 請選擇 建置 頁面或區段,並且如果您在目前的 UI 中,請開啟 錯誤和警告 子區段。

  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 的警告

您可以編輯專案的 .vbproj 檔案,以隱藏 Visual Basic 的特定編譯程式警告。 若要隱藏 類別的警告訊息,您可以使用 編譯屬性頁。 如果您要在程式代碼檔案的特定部分中停用警告,請使用 #Disable 和 #Enable 指示詞。 如需詳細資訊,請參閱 在Visual Basic中設定警告。

隱藏整個 Visual Basic 專案的特定警告

此範例示範如何編輯 .vbproj 檔案,以隱藏特定的編譯程式警告。

  1. [方案總管]中,選擇您要隱藏警告的專案。

  2. 在選單列上,選擇 [專案]>[卸除專案]

  3. [方案總管]中,開啟專案的滑鼠右鍵或快捷鍵選單,然後選擇 [編輯 <ProjectName>.vbproj]。

    XML 項目檔會在程式碼編輯器中開啟。

  4. 找出您使用的建置組態的 <NoWarn> 元素,並將一個或多個警告編號新增為 <NoWarn> 元素的值。 如果您指定多個警告編號,請以逗號分隔它們。

    下列範例顯示 x86 平臺上 偵錯 建置組態的 <NoWarn> 元素,並隱藏兩個編譯程式警告:

    <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. 在選單列上,選擇 [建置>重建方案]

    [輸出] 視窗不再顯示您指定的警告。

如需詳細資訊,請參閱 Visual Basic 命令行編譯程式的 /nowarn 編譯程式選項

您可以針對個別警告或依類別抑制警告。 根據您使用的是 .NET Framework 專案或 .NET Core (或 .NET 5 和更新版本)專案,體驗會有所不同。

如果您要在程式代碼檔案的特定部分中停用警告,請使用 #Disable 和 #Enable 指示詞。 如需詳細資訊,請參閱 在Visual Basic中設定警告。

.NET 5 或更新版本專案

您可以編輯項目檔,以依診斷程式代碼隱藏特定編譯程式警告,或使用專案設計工具依類別隱藏警告。 若要開啟項目設計工具,請選取項目節點,以滑鼠右鍵按兩下,然後選擇 [屬性] ,或按 [Alt+Enter]。

在 [編譯] 區段中,選擇 [警告]。 在 [警告嚴重性] 下,您可以選擇 個別設定警告嚴重性。 顯示類別,而且您可以選擇將每個類別設定為 [無] 停用警告類別,或將它設定為 [警告] 或 [錯誤],以啟用警告或錯誤。

顯示 Visual Basic .NET 專案的 [警告嚴重性] 設定的螢幕快照。

.NET Framework 專案

您可以編輯專案的 .vbproj 檔案,以隱藏 Visual Basic 的特定編譯程式警告。 若要抑制 類別的警告,可以使用 編譯 屬性頁

隱藏整個 Visual Basic 專案的特定警告

此範例示範如何編輯 .vbproj 檔案,以隱藏特定的編譯程式警告。

  1. [方案總管]中,選擇您要隱藏警告的專案。

  2. (.NET)按兩下項目節點以開啟項目檔。

    (.NET Framework)在選單列上,選擇 [專案]>[卸除專案]。 然後,在 [方案總管]中,開啟專案的滑鼠右鍵或快捷方式功能表,然後選擇 [編輯 <ProjectName>.vbproj]。

    MSBuild 項目檔會在程式碼編輯器中開啟。 這是 XML 檔案。

  3. 找出您要建置的組態的 <NoWarn> 元素,並將一或多個警告編號新增為 <NoWarn> 元素的值。 如果您指定多個警告編號,請以逗號分隔它們。

    下列範例顯示 x86 平臺上 偵錯 建置組態的 <NoWarn> 元素,並隱藏兩個編譯程式警告:

    <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. 在選單列上,選擇 [項目>重載專案

  6. 在選單列上,選擇 [建置>重建方案]

    [輸出] 視窗不再顯示您所指定的警告訊息。

如需詳細資訊,請參閱 Visual Basic 命令行編譯程式的 /nowarn 編譯程式選項

編輯項目檔以隱藏警告

使用 Visual Studio 屬性設計工具隱藏警告會導致專案檔變更。 有時,手動編輯項目檔以完成停用警告的工作會更方便。 項目檔是由 MSBuild 處理,Microsoft的建置引擎。 請參閱 MSBuild

此外,在Visual Studio 2019 16.7版和更早版本中,編譯程式以外的工具的某些警告無法以任何其他方式隱藏。

  1. 若要在 Visual Studio 編輯器中開啟項目檔,請以滑鼠右鍵按兩下項目節點,然後選擇 [編輯項目檔] 。 某些項目類型會要求您卸除專案,才能編輯項目檔。 如果您需要卸除專案,請以滑鼠右鍵按下項目節點,然後選擇 [[卸除專案]

  2. 在新 PropertyGroup 區段中,使用 NoWarn 屬性。 列出您想要隱藏的錯誤,並以逗號或分號分隔。 針對編譯程式警告,您可以省略語言程式代碼並只輸入數位,但為了清楚起見,建議您使用完整的程序代碼。 如需組建中其他工具的警告,請指定完整的程序代碼,包括前置詞(例如 MSBuild 本身發出的警告 MSB)。

    下列程式代碼會將警告 CS0028 和 CS0618 新增至隱藏警告清單:

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

    參考先前的 $(NoWarn) 值,如上一個範例所示,會將這些數位新增至先前為 NoWarn設定的值,而不是覆寫該值。

請參閱 NoWarn

隱藏組建命令行的警告

如果您要從命令行建置專案,您也可以在 MSBuild 命令行使用 -warnAsMessage 來隱藏警告。 請在多個警告碼的清單周圍使用引號。

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 或標準匯入的專案中,您可以使用先前所述的相同方法來隱藏工具警告。 您必須指定完整的錯誤碼(包括像 MSBuild 的 MSB 這樣的前置詞),而不能像編譯器警告那樣僅使用數字。 此外,訊息不會被刪除;它仍顯示為資訊訊息,但已從警告降級。

使用 MSBuild 16.7 或更早版本時,並且在任何不使用 SDK 或標準匯入的專案中,這些警告不會藉由 NoWarn被隱藏。 在這種情況下,您可以使用屬性 MSBuildWarningsAsMessages來隱藏工具警告。 您可以編輯項目檔,或在 MSBuild 命令行指定 MSBuildWarningsAsMessages 選項,以隱藏建置警告。 當您使用 MSBuildWarningsAsMessages時,請使用完整的 MSBuild 錯誤碼,包括 MSB 前置詞。

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

請注意,設定 MSBuildWarningsAsMessages,就無法隱藏某些 MSBuild 警告。 若要停用它們,請使用命令列選項 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 開頭的程式代碼診斷訊息是程式代碼分析違規和警告,這與本文所討論的編譯程式警告不同。 您可以藉由使用規則設定檔以各種方式抑制程式碼分析警告,包括針對特定網站的標記、整個專案或全域。 請參閱 抑制程式碼分析警告抑制程式碼分析違規