共用方式為


在 Visual Basic 中設定警告

Visual Basic 編譯程式包含一組可能會造成運行時錯誤的程式代碼警告。 您可以使用該資訊來撰寫更簡潔、更快速、更好的程序代碼,併產生較少的 Bug。 例如,當使用者嘗試叫用未指派物件變數的成員、從函式傳回而不設定傳回值,或執行邏輯中有錯誤的 Try 區塊以攔截例外狀況時,編譯程式會產生警告。

有時候編譯程式會代表使用者提供額外的邏輯,讓使用者可以專注於手邊的工作,而不是預期可能發生的錯誤。 在舊版 Visual Basic 中,Option Strict 是用來限制 Visual Basic 編譯程式提供的其他邏輯。 設定警告可讓您以更細微的方式,在個別警告層級限制此邏輯。

您可能會想要自訂專案,並關閉與應用程式不相關的一些警告,而將其他警告視為錯誤。 此頁面說明如何開啟和關閉個別警告。

開啟和關閉警告

有數種不同的方法來設定警告:您可以使用 項目設計工具來設定警告,您可以使用 /warnaserror/nowarn 編譯程式選項,或者您可以編輯專案檔 (vbproj 檔案),並使用 NoWarn MSBuild 屬性。 若要使用 MSBuild 屬性,請參閱 隱藏整個 Visual Basic 專案的特定警告

項目設計工具 體驗會根據您使用 .NET Framework 專案或 .NET Core(或 .NET 5 或更新版本)專案而有所不同。

在 .NET Core(或 .NET 5 和更新版本)專案中,專案設計師編譯 區段包含一個稱為 警告嚴重性 的設定。您可以用此設定來停用所有警告,將所有警告升級為錯誤,或者選擇個別控制每個警告類別(預設值)。 警告類別設定會出現在 項目設計工具的相同區域中。

在 .NET Framework 專案中,在 [項目設計工具]的 [編譯] 索引卷標中,選取 [停用所有警告] 複選框,以停用所有警告:選取 [將所有警告視為錯誤,將所有警告視為錯誤。 某些個別警告可以根據需要在顯示表格中切換為錯誤或警告。

[專案設計工具] 頁面的 [編譯] 索引標籤可讓您開啟和關閉警告功能。 選取 [停用所有警告] 複選框以停用所有警告;選取 [將所有警告視為錯誤,將所有警告視為錯誤。 某些個別警告可以在所顯示的表格中按需切換為錯誤或警告。

Option Strict 設定為 [關閉]時,Option Strict 相關警告無法彼此獨立處理。 當 Option Strict 設定為 On時,無論其狀態為何,相關聯的警告都會被視為錯誤。 在命令列編譯程式中指定 /optionstrict:custom 後,當 Option Strict 設定為 自定義 時,Option Strict 警告可以獨立開啟或關閉。

編譯程式的 /warnaserror 命令行選項也可以用來指定是否將警告視為錯誤。 您可以將逗號分隔清單新增至此選項,以指定應該使用 + 或 -將哪些警告視為錯誤或警告。 下表詳細說明可能的選項。

命令行選項 指定
/warnaserror+/warnaserror 將所有警告視為錯誤
/warnsaserror- 請勿將警告視為錯誤。 此設定為預設值。
/warnaserror+:<warning list > 將特定警告視為錯誤,其錯誤標識碼列在逗號分隔清單 r 中。
/warnaserror-:<warning list> 請勿將特定警告視為錯誤,其錯誤標識碼會列在逗號分隔清單中。
/nowarn 請勿報告警告。
/nowarn:<warning list> 請勿報告指定的警告,其錯誤標識碼列在逗號分隔清單中。

警告清單包含應視為錯誤之警告的錯誤標識符,這可與命令行選項搭配使用,以開啟或關閉特定警告。 如果警告清單包含無效的數位,則會報告錯誤。

例子

此範例表格說明命令列參數的作用。

論點 描述
vbc /warnaserror 指定所有警告都應該視為錯誤。
vbc /warnaserror:42024 指定警告 42024 應視為錯誤。
vbc /warnaserror:42024,42025 指定應該將警告 42024 和 42025 視為錯誤。
vbc /nowarn 指定不應報告任何警告。
vbc /nowarn:42024 指定不應報告警告 42024。
vbc /nowarn:42024,42025 指定不應報告警告 42024 和 42025。

警告類型

以下是您可能想要視為錯誤的警告清單。

隱含轉換警告

針對隱含轉換的實例生成。 使用 & 運算符時,它們不包含從內建數值類型到字元串的隱含轉換。 新項目的預設值為關閉。

標識碼:42016

晚期綁定方法調用和多載解析警告

延遲繫結的實例生成。 新項目的預設值為關閉。

標識碼:42017

類型為「Object」的運算元警告

當運算元類型為 ObjectOption Strict On時會發生錯誤。 新項目的預設值為開啟。

標識碼:42018 和 42019

宣告需要 『As』 子句警告

當變數、函式或屬性宣告缺乏 As 子句時,如果在 Option Strict On的情況下,會導致錯誤。 沒有指定型態給它們的變數會假設為類型 Object。 新項目的預設設定為開啟。

標識碼:42020(變數宣告)、42021(函數宣告)和 42022(屬性宣告)。

可能的空值參考例外狀況警告

在變數指派值之前使用變數時產生。 新項目的預設值為開啟。

標識碼:42104、42030

未使用的局部變數警告

在宣告局部變數但從未參考時產生。 預設值為開啟。

標識碼:42024

透過實例變數警告存取共享成員

透過實例存取共享成員時,可能會產生副作用,或透過實例變數存取共享成員時,不是表達式的右側,或是以參數形式傳入。 新項目的預設值為開啟。

標識碼:42025

遞迴運算子或屬性存取警告

當例程主體使用中定義的相同運算元或屬性時產生。 新項目的預設狀態為開啟。

識別碼:42004(操作員),42026(屬性)

沒有傳回值警告的函式或運算子

當函式或運算子沒有指定的傳回值時產生。 這包括省略與函式同名的隱含局部變數 Set。 新專案的預設設定是開啟。

識別碼:42105(函式),42016(運算子)

模組警告中使用的多載修飾詞

Module中使用 Overloads 時產生。 新項目的預設值為開啟。

標識碼:42028

重複或重疊的 catch 區塊警告

當從未達到 Catch 區塊時產生,因為其與其他已定義的 Catch 區塊相關。 新專案的預設狀態為啟用。

標識碼:42029、42031