分享方式:


隱藏編譯器警告

使用 Visual Studio,您可以藉由在專案設計工具 (專案屬性頁) 中指定警告碼,以指定您想要隱藏的警告。 當您只要隱藏一個位置中的警告時,也可以藉由直接在專案檔、透過命令列或是在程式碼中設定某些屬性來隱藏警告。

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

如果您的目標是在組建記錄檔中看到更簡潔且聚焦的輸出,您可能會想要變更組建記錄檔詳細程度。 可用的設定為 [一般]、[詳細] 或 [診斷]。 如需詳細資訊的詳細資訊,請參閱如何:檢視、儲存和設定組建記錄檔

警告

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

隱藏 Visual C# 或 F# 的特定警告

使用 [組建] 屬性隱藏整個 C# 和 F# 專案的特定警告。 如果您想要只在 C# 中特定部分程式碼隱藏警告,請使用 #pragma warning。 針對 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 warning

  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. 在 [方案總管] 中,以滑鼠右鍵按一下開啟專案的捷徑功能表,然後選擇 [編輯 <專案名稱>.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 編譯器選項

編輯專案檔來隱藏警告

使用 Visual Studio 屬性設計工具隱藏警告會導致專案檔變更。 有時候手動編輯專案檔以完成停用警告的工作會更方便。 專案檔是由 Microsoft 的建置引擎 MSBuild 處理。 請參閱 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 套件。

    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>
    

隱藏程式碼分析警告

程式碼開頭為 CA 的診斷訊息是程式碼分析違規和警告,這與本文所討論的編譯器警告不同。 您可以使用規則組態檔,以各種方式隱藏程式碼分析警告,包括使用網站特定的標記和全專案或全域。 請參閱隱藏程式碼分析警告隱藏程式碼分析違規