其實我大部分時間都在 Visual Studio Code 裡面做開發,久而久之就生疏了 Visual Studio 2022 裡面的各種選項設定,有很多都是近幾年才有的新功能,而有些「預設值」確實不太好用,只要沒特別去研究,就不知道原來只要微調一下就會變的非常方便。這篇文章我就來整理一下 Visual Studio 2022 在開發 ASP.NET Core 時相關的那些重要設定。
啟動但不偵錯 (Start Without Debugging)
我常常跟上我課的學員分享,我寫程式幾乎不進偵錯模式,因為啟動速度太慢了,所以幾乎都不 Debug 的。所以我每次在開發 ASP.NET Core 的時候,都是使用 啟動但不偵錯 (Start Without Debugging
) 的方式開啟網站,快速鍵是 Ctrl + F5
,這樣 Visual Studio 2022 就不會進入偵錯模式,而是直接啟動網站,速度快很多。
自動啟動瀏覽器
這個部分並不是 Visual Studio 2022 的設定,而是 ASP.NET Core 在啟動網站時的設定。
由於在 ASP.NET Core 預設的專案範本中,都會有一個 Properties/launchSettings.json
檔案,在這份設定檔中,主要有三個區塊,分別是:
$schema
(宣告這份文件的 JSON Schema URL,用來讓 Visual Studio 2022 能夠提供 JSON 文件的 Intellisense)
iisSettings
(宣告使用 IIS Express 裝載網站時的 IIS 站台設定)
profiles
(宣告各種不同的啟動設定檔,例如 http
、IIS Express
等等)
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
},
"profiles": {
"http": {
},
"IIS Express": {
}
}
}
由於預設有兩個啟動設定檔,分別是 http
(或 https
) 和 IIS Express
:
-
http
設定檔
這個設定檔主要給使用 .NET CLI 直接啟動 ASP.NET Core 時使用,這種啟動方法會開啟一個 Console
(命令提示字元) 視窗。
-
IIS Express
設定檔
這個設定檔主要給使用 IIS Express 裝載並啟動 ASP.NET Core 應用程式時使用,這種啟動方法不會有 Console
視窗,所以你會看不到 Console
的訊息。
這兩個設定檔都有一個 launchBrowser
屬性,且屬性預設是 true
,這個設定會你在按下 Ctrl+F5
(啟動但不偵錯) 時,每次都會開啟瀏覽器頁籤,在自動重整網站時也會自動開啟瀏覽器頁籤,如果只開一次的話,當然是很貼心,但第二次按下 Ctrl+F5
(啟動但不偵錯) 時,又開一個新的頁籤就很煩人了!
所以,要不要關掉呢?答案是:維持預設值!開著!因為我稍後會說明最完美的設定方法!
[工具] -> [選項] -> [專案和方案] -> [ASP.NET Core]
這裡的選項就是本篇文章的重點之處,好的設定讓你上天堂,好用的不要不要的!👍
我直接顯示我認為最完美的設定,照著設定就可以:
以下是每個選項的詳細解說:
-
一般
-
自動建置並重新整理瀏覽器 (Auto build and refresh option)
選項用於在專案進行更改並執行 Web 伺服器時,自動建置並重新整理瀏覽器。這些設定適用於不支援熱重新載入或已禁用熱重新載入的應用程式。
這裡有 4 個選項:
None
不自動建置或重新整理瀏覽器
Auto build on browser request (IIS only)
在 IIS 上僅在瀏覽器請求時自動建置
Refresh browser after build
在建置後重新整理瀏覽器
Auto build and refresh browser after saving changes
在專案儲存更改後自動建置並重新整理瀏覽器
我覺得最好的選項就是最後一個,因為在不支援 Hot Reload (熱重新載入) 的情況下,這個選項可以讓你在儲存檔案後,自動建置並重新整理瀏覽器,這樣就不用手動按 Ctrl+F5
,同時也意味著不會自動開啟瀏覽器頁籤!👍
-
建置後自動重新啟動 Kestrel 伺服器 (Auto restart Kestrel server after build: True)
如果 Kestrel 伺服器在建置之前正在執行,則自動重新啟動 Kestrel 伺服器。
這個選項肯定要打開,因為只要你先前正在執行的 Kestrel 還在執行時,所有的 *.dll 檔案會被鎖定,這會導致 Visual Studio 2022 會無法順利建置你的專案,只要經常不能建置,你一定會覺得很煩!啟用這個設定後,你在建置專案時,他就會去自動判斷目前是否有正在執行的 Kestrel 伺服器 (其實就是 ASP.NET Core 應用程式啦),如果有找到,就會自動幫你停止,然後再重新啟動,這樣就不會有檔案被鎖定的問題了!👍
-
CSS 熱重新載入 (CSS Hot Reload: Enabled)
在編輯時啟用在瀏覽器中熱重新載入 CSS 更改。
顧名思義,當你在 ASP.NET Core MVC 修改 CSS 的時候,網頁不用重新整理,更新後的 CSS 就會自動套用到網頁上,連專案都不用重新建置,非常的方便!👍
-
輸出選項
-
最小化啟動外部控制台 (Launch external console minimized)
在外部 Console 中執行 ASP.NET Core Web 伺服器時,最小化或正常啟動。
設定為 True
時,額外開啟的 Console 視窗會自動進行最小化,這樣就不會一直跳出來,影響你的工作。但如果你是像我一樣有時候有授課的需求,經常要跟學員展示 Console 的內容時,你也可以設定為 False
,這樣每次 Kestrel 重新啟動時,這個 Console 視窗就會自動被提升到最前面顯示,你會優先看到 Console 的訊息內容。👍
-
在以下位置執行 Web 伺服器 (Run web server in)
在 Visual Studio 的整合終端或外部 Windows Console 中執行 ASP.NET Core Web 伺服器。
這裡有 2 個選項:
External Console
(會額外開啟一個 Console 命令提示字元視窗)
Integrated Terminal
(會在 Visual Studio 裡面額外開啟一個新的窗格)
你只要選擇 Integrated Terminal
就保證會煩死你,因為你每次重新啟動 Kestrel 他都會不斷開啟新的 Terminal 視窗,真的超級干擾的。所以保留預設值的 External Console
應該才是最佳選擇!👍
-
使用共用的 Web 伺服器輸出視窗 (Use shared web server output window)
將每個專案的 Web 伺服器輸出重定向到其自己的輸出視窗,或者交錯到共用的輸出視窗中。
這個設定我完全看不懂怎麼用,測不出任何差異或有任何好處,不要動他即可。👎
[工具] -> [選項] -> [偵錯] -> [一般]
Hot Reload
(熱重新載入) 是個好東西,請務必記得啟用他。只要啟用了這個 Enable Hot Reload
設定後,Visual Studio 2022 預設會監控你的整個專案,他會在你有修改任何 *.cs
或 *.json
檔案時,自動重新載入正在執行的 ASP.NET Core 應用程式,這樣可以大幅減少重新建置與重新啟動的時間!👍
不過,你在 Visual Studio 2022 幫你開啟的 Windows Console 視窗中,不一定會看到 Hot Reload 的訊息。在修改 appsettings.*.json
時,會顯示以下訊息:
dbug: Microsoft.AspNetCore.Server.Kestrel[0]
Config reload token fired. Checking for changes...
但在修改 *.cs
的時候,就看不到 Hot Reload 的資訊了,但你可以在 Visual Studio 2022 的 Output
視窗中,選擇 Hot Reload
類別,這樣就可以看到 Hot Reload 的訊息了!
[工具] -> [選項] -> [偵錯] -> [.NET / C++ Hot Reload]
這裡是設定 Hot Reload 的一些相關選項,建議可以全部啟用,可以大幅改善 ASP.NET Core 的開發體驗!👍
-
啟用熱重新載入 (Enable Hot Reload)
這肯定要勾選!✅
-
在不進行偵錯的情況下啟用熱重新載入 (Enable Hot Reload when starting without debugging)
這個選項是在你按下 Ctrl+F5
(啟動但不偵錯) 時,是否要啟用 Hot Reload
,這個選項當然也要勾選!✅
-
在檔案儲存時應用熱重新載入 (Apply Hot Reload on File Save)
這個選項是在你儲存檔案時,是否要啟用 Hot Reload
,這個選項當然也要勾選!✅
-
設定日誌詳細程度 (Logging verbosity: Minimal)
這個選項是設定 Hot Reload
的日誌詳細程度,預設是 Minimal
,這個設定就夠用了,不用再調整。👍
除了選項設定外,也有 Visual Studio 2022 的工具列也可以快速設定:
然而,並非所有的程式碼修改,都可以順利的套用 Hot Reload 機制,當無法套用的時候,就會出現以下對話框,建議勾選 Always rebuild when changes can't be applied
選項,他就不會再問你了,下次就會直接重新建置並自動啟動網站。不過這個選項不會保存下來,你只要重開 Visual Studio 2022 下次還是會再看到一次。
調整 REST API Editor 的「送出要求」快速鍵
從 Visual Studio 2022 的 v17.5
開始,就有內建一個超級好用的 REST API 編輯器 (REST API Editor),當我們要送出 HTTP 要求時,Visual Studio 2022 並沒有提示我們鍵盤的快速鍵是什麼,所以很多人並不知道可以透過 Ctrl+Alt+S
快速送出 HTTP 要求,常用的人可以記起來!
不過,我在 Visual Studio Code 也會用 .http
檔案,只要搭配 REST Client 擴充套件,就可以做到一樣的事。而我在 Visual Studio Code 那邊的快速鍵是 Ctrl+Enter
,所以我習慣把 Visual Studio 2022 的快速鍵也設定為 Ctrl+Enter
,這樣就不用記兩種快速鍵了!👍
事實上 Visual Studio Code 的 REST Client 擴充套件比 Visual Studio 2022 還好用,大家有興趣可以深入研究。
加入 .editorconfig
統一程式碼風格
Visual Studio 2022 預設的變數命名規則跟 ASP.NET Core 專案範本中的變數命名並不一致,我先前在 YouTube 有分享過一部 Visual Studio 2022 如何設定預設變數命名規則 教學影片,影片中有詳細的說明這個問題,也有分享設定的方法,由於設定過程有點複雜,建議大家看影片比較清楚!
以下是我設定好的畫面截圖:
但是每個人都要設定這麼多選項,實在是太麻煩了,所以我建議是透過 .editorconfig
來統一專案的程式碼風格,這樣就不用每個人分別設定了。
-
先加入 Visual Studio 2022 內建的 .editorconfig
設定檔,你可以參考下圖來新增
-
直接在專案中加入我已經設定好的 .editorconfig
設定檔內容片段:
以下片段直接加入到 .editorconfig
的最後一行下方即可,主要設定 *.cs
一定要以 UTF-8 with BOM
來儲存檔案,其餘就是統一 private
與 internal
的欄位要以 _
(底線) 開頭,統一變數命名規則!
[*.cs]
charset = utf-8-bom
#### Naming styles ####
# Symbol specifications
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
# Naming rules
dotnet_naming_rule.private_or_internal_field_should_be_prefix__.severity = suggestion
dotnet_naming_rule.private_or_internal_field_should_be_prefix__.symbols = private_or_internal_field
dotnet_naming_rule.private_or_internal_field_should_be_prefix__.style = prefix__
# Naming styles
dotnet_naming_style.prefix__.required_prefix = _
dotnet_naming_style.prefix__.required_suffix =
dotnet_naming_style.prefix__.word_separator =
dotnet_naming_style.prefix__.capitalization = camel_case
相關連結