在 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」的運算元警告
當運算元類型為 Object
且 Option 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