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