隱藏編譯程式警告
使用 Visual Studio,您可以藉由在項目設計工具 (專案屬性頁) 中指定警告碼,以指定您想要隱藏的警告。 您也可以藉由直接在項目檔、命令行或程式代碼中設定特定屬性來隱藏警告,以便只隱藏一個位置中的警告。
某些編譯程式和建置工具也有指定警告層級的選項。 這可讓您使用一個設定來控制警告的類別。 如需這些選項,請參閱您使用的特定語言和編譯程序檔:
如果您的目標是在建置紀錄中看到更簡潔且更聚焦的輸出,您可能會想要變更建置紀錄的詳細程度。 可用的設定為 標準、詳細或 診斷。 如需了解詳盡訊息,請參閱 如何:檢視、儲存及設定建置記錄檔。
謹慎
請注意,警告是要指出程式碼的潛在問題,因此您應該瞭解停用任何特定警告的風險。 Visual Studio 設定會停用專案層級的警告。 您可能想要使用更有針對性的方法來停用 Visual Studio 所提供的警告。 大部分的編譯程式都提供方法,只針對特定程式代碼行停用警告,因此,如果警告發生在相同專案中的其他地方,您仍然可以檢閱這些警告。
抑制 Visual C# 或 Visual F# 的特定警告
使用 組建 屬性來隱藏整個 C# 和 F# 專案的特定警告。 如果您想要只在 C# 中特定部份隱藏警告,請使用 #pragma 警告。 針對 F#,請使用 #nowarn 預處理器指令來停用整個原始程式碼檔案的警告。
在 [方案總管]中,選擇您要隱藏警告的專案。
以滑鼠右鍵點擊專案節點,然後在快捷功能表上選擇 [屬性]。 或者,選取項目節點,然後按 Alt+Enter。
選擇 [建置 ],然後移至 [錯誤和警告] 小節。
在 [隱藏警告 或 隱藏特定警告 方塊中,指定您要隱藏的警告錯誤碼,並以分號分隔。 如需警告碼的清單和描述,請參閱 C# 編譯程式訊息。
重建解決方案。
在 [方案總管]中,選擇您要隱藏警告的專案。
以滑鼠右鍵點擊項目節點,然後在選單上選擇 [屬性]。 或者,選取項目節點,然後按 Alt+Enter。
請選擇 建置 頁面或區段,並且如果您在目前的 UI 中,請開啟 錯誤和警告 子區段。
在 [隱藏警告 或 隱藏特定警告 方塊中,指定您要隱藏的警告錯誤碼,並以分號分隔。 如需警告碼的清單和描述,請參閱 C# 編譯程式訊息。
重建解決方案。
注意
無法隱藏某些警告。 如需這些清單,請參閱 NoWarn 編譯選項。
隱藏C++的特定警告
您可以使用專案屬性來隱藏C++專案中的警告;您可以使用 [組態屬性] 屬性頁來隱藏整個C++專案的特定警告。 您也可以使用 #pragma warning
來隱藏特定檔案中的警告。 本文涵蓋專案層級控制,但如果您的意圖是在特定檔案中停用警告,或只是針對幾行程式碼附近停用,但仍想看到相同警告在其它地方的出現,您應該考慮使用 #pragma warning
。 請參閱 #pragma 警告。
在 [方案總管] 中,選擇您要隱藏警告的專案或來源檔案。
在選單列上,選擇 [檢視]>[屬性頁]。
選擇 [組態屬性] 類別,選擇 [C/C++] 類別,然後選擇 [進階] 頁面。
執行下列步驟之一:
在 [停用特定警告] 方塊中,指定您要隱藏之警告的錯誤碼,並以分號分隔。
在 [停用特定警告] 方塊中,選擇 [編輯] 以顯示更多選項。
請選擇 [確定] 按鈕 ,然後重建解決方案。
如果警告來自另一個工具,請參閱特定工具的檔,以瞭解如何隱藏此工具的警告。 例如,C++連結器有一些您可以使用 /IGNORE
連結器選項停用的警告。 請參閱 /IGNORE (忽略特定警告),若要設定此選項,請參閱 /link (傳遞連結器選項)。
隱藏 Visual Basic 的警告
您可以編輯專案的 .vbproj
檔案,以隱藏 Visual Basic 的特定編譯程式警告。 若要隱藏 類別的警告訊息,您可以使用 編譯屬性頁。 如果您要在程式代碼檔案的特定部分中停用警告,請使用 #Disable 和 #Enable 指示詞。 如需詳細資訊,請參閱 在Visual Basic中設定警告。
隱藏整個 Visual Basic 專案的特定警告
此範例示範如何編輯 .vbproj
檔案,以隱藏特定的編譯程式警告。
在 [方案總管]中,選擇您要隱藏警告的專案。
在選單列上,選擇 [專案]>[卸除專案]。
在 [方案總管]中,開啟專案的滑鼠右鍵或快捷鍵選單,然後選擇 [編輯 <ProjectName>.vbproj]。
XML 項目檔會在程式碼編輯器中開啟。
找出您使用的建置組態的
<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>
將變更儲存至
.vbproj
檔案。在選單列上,選擇 [專案>重載專案]。
在選單列上,選擇 [建置>重建方案]。
[輸出] 視窗不再顯示您指定的警告。
如需詳細資訊,請參閱 Visual Basic 命令行編譯程式的 /nowarn 編譯程式選項。
您可以針對個別警告或依類別抑制警告。 根據您使用的是 .NET Framework 專案或 .NET Core (或 .NET 5 和更新版本)專案,體驗會有所不同。
如果您要在程式代碼檔案的特定部分中停用警告,請使用 #Disable 和 #Enable 指示詞。 如需詳細資訊,請參閱 在Visual Basic中設定警告。
.NET 5 或更新版本專案
您可以編輯項目檔,以依診斷程式代碼隱藏特定編譯程式警告,或使用專案設計工具依類別隱藏警告。 若要開啟項目設計工具,請選取項目節點,以滑鼠右鍵按兩下,然後選擇 [屬性] ,或按 [Alt+Enter]。
在 [編譯] 區段中,選擇 [警告]。 在 [警告嚴重性] 下,您可以選擇 個別設定警告嚴重性。 顯示類別,而且您可以選擇將每個類別設定為 [無] 停用警告類別,或將它設定為 [警告] 或 [錯誤],以啟用警告或錯誤。
.NET Framework 專案
您可以編輯專案的 .vbproj
檔案,以隱藏 Visual Basic 的特定編譯程式警告。 若要抑制 類別的警告,可以使用 編譯 屬性頁。
隱藏整個 Visual Basic 專案的特定警告
此範例示範如何編輯 .vbproj
檔案,以隱藏特定的編譯程式警告。
在 [方案總管]中,選擇您要隱藏警告的專案。
(.NET)按兩下項目節點以開啟項目檔。
(.NET Framework)在選單列上,選擇 [專案]>[卸除專案]。 然後,在 [方案總管]中,開啟專案的滑鼠右鍵或快捷方式功能表,然後選擇 [編輯 <ProjectName>.vbproj]。
MSBuild 項目檔會在程式碼編輯器中開啟。 這是 XML 檔案。
找出您要建置的組態的
<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>
將變更儲存至
.vbproj
檔案。在選單列上,選擇 [項目>重載專案。
在選單列上,選擇 [建置>重建方案]。
[輸出] 視窗不再顯示您所指定的警告訊息。
如需詳細資訊,請參閱 Visual Basic 命令行編譯程式的 /nowarn 編譯程式選項。
編輯項目檔以隱藏警告
使用 Visual Studio 屬性設計工具隱藏警告會導致專案檔變更。 有時,手動編輯項目檔以完成停用警告的工作會更方便。 項目檔是由 MSBuild 處理,Microsoft的建置引擎。 請參閱 MSBuild 。
此外,在Visual Studio 2019 16.7版和更早版本中,編譯程式以外的工具的某些警告無法以任何其他方式隱藏。
若要在 Visual Studio 編輯器中開啟項目檔,請以滑鼠右鍵按兩下項目節點,然後選擇 [編輯項目檔] 。 某些項目類型會要求您卸除專案,才能編輯項目檔。 如果您需要卸除專案,請以滑鼠右鍵按下項目節點,然後選擇 [[卸除專案]。
在新
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 套件的特定警告
在 [方案總管]中,選取您要隱藏編譯程式警告的 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
開頭的程式代碼診斷訊息是程式代碼分析違規和警告,這與本文所討論的編譯程式警告不同。 您可以藉由使用規則設定檔以各種方式抑制程式碼分析警告,包括針對特定網站的標記、整個專案或全域。 請參閱 抑制程式碼分析警告 和 抑制程式碼分析違規。