Try   HackMD

常用套件整理

年紀大了,記憶不好,每次安裝 Visual Studio 都要花時間查一下之前安裝了哪些套件,及套件功能是什麼,所以寫一篇文章記錄下來。

Visual Studio 的擴充套件

  • 「Productivity Power Tools」和「Web Essentials」以前都是單一套件,後續不知哪一版本的 Visual Studio 開始將其底下各功能改為獨立套件,變成可選擇獨立安裝各功能套件,或藉由安裝同捆包來一次安裝。
  • 安裝這類同捆包時,是在安裝時會忽略已獨立安裝的套件。
  • 早期我是直接安裝同捆包,後續因為以下原因,改成安裝獨立套件:
    • 由於 Visual Studio 2022 改為 64 位元時,很多套件都無法支援,或是有些功能改為 Viusal Studio 內建,(「Zen-Coding」),導致同捆包裡有在使用套件比重有逐漸降低的跡象。
    • 以前安裝同捆包,卻沒注意同捆包有哪些套件,導致很多功能我以為是內建的,結果是擴充套件的功能,而不同時期安裝的同捆包,實際安裝的套件都不一樣,有可能是新版的 Visual Studio 尚未支援,或是已不列為同捆包的一部分,像是「Web Compiler」和「Bundler & Minifier」後期就變成是要獨立安裝的套件(忘了是 Viusal Studio 2015 還是 2017 開始),而移除同捆包時,似乎不會移除底下相關套件,最後導致只安裝同捆包也不確定安裝什麼,倒不如把需要安裝的套件列清單來安裝。

Visual Studio 設定

  • 環境:
    • 一般:
      • 為不同像素密度的螢幕最佳化呈現方式:當遇到操作 Visual Studio 發現滑鼠指標會亂跑,比較常發現在操作 SQL 檔時,關掉此設定可以解決。
      • 字型和色彩:字型選擇等寬字體「Consolas」,大小選 12。
      • 索引標籤和視窗:
        • 設定索引標籤配置:如果有外接大螢幕,可以改為「左」或「右」。
        • 文件索引標籤著色方式:打勾。
        • 在文件索引標籤上顯示「關閉」按鈕、在文件中顯示「關閉」按鈕:預設只會勾前者。
    • 擴充功能:
      • 依使用者延伸模組
        • 如果擴充套件有需要指定特定版本,取消打勾「自動更新延伸模組」。
  • 文字編輯器:
    • 一般:顯示全部打勾。
    • C#:
      • 進階:
        • Using 指示詞:.NET Framework 時期,習慣會開啟「排序 Using 時,先放置 'System' 指示詞」,所以如果沒設定 editorconfig 時,最好確認團隊設定是否一致。
        • 大綱:開啟「顯示程序行分隔符號」:這樣方法間和屬性間,只要有空白行,都會有白線分隔。
        • 淡出:啟用設定,提醒是否有多餘的 Using 和 變數。
        • 編輯器說明:「為重新指派的變數加上底線」:方便確認變數是否有被多次指派。

NuGet 套件

  • Microsoft Packages:
    • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation:動態編譯 ASP.NET Core Razor 檔案。
    • Entity Framework Core:
      • Microsoft.EntityFrameworkCore:EF Core 基本功能。
      • Microsoft.EntityFrameworkCore.SqlServer:SQL Server 資料庫提供者,其它資料庫請參考「資料庫提供者」:常見的關係資料庫功能。
      • Microsoft.EntityFrameworkCore.Design:Entity Framework 設計工具,執行像是 Migration 之類的功能。
      • Microsoft.EntityFrameworkCore.Relational:常見的關係資料庫功能。
      • Microsoft.EntityFrameworkCore.Tools:主控台工具。

      非建置 Entity 的專案,正常來說只要安裝以下套件就好:

      • Microsoft.EntityFrameworkCore。
      • Microsoft.EntityFrameworkCore.SqlServer 或其它資料庫提供者。
      • Microsoft.EntityFrameworkCore.Relational。
    • Microsoft.AspNet.WebApi.Client:簡化 HttpClient 的操作。
  • CommunityToolkit.Mvvm:用來簡化 MVVM 架構開發的套件。
  • Autofac:DI 套件。
  • AutoMapper:將 Object 值映射到另一個 Object。
  • Dapper:輕量化的 ORM 套件。
  • FluentValidation:建構強類型驗證規則。
  • Humanizer:功能非常強大的字串轉換工具,可將時間、數字轉換成口語化英文、英文單複數轉轉換,及各種字句 Format。
  • CsvHelper:CSV 套件。
  • NPOI:免費的 Excel 套件。
  • 原本還有另外一個功能更強大 Excel 套件是 EPPlus,但是它只有在 EPPlus 4 以前可以免費使用,EPPlus 5 以後,授權改為「Polyform Noncommercial 1.0.0」,無法用於商業環境,但如果只是個人使用則沒問題。
  • NPOI 有支援「XLS」格式,EPPlus 僅支援「XLSX」,但個人經驗,目前 EPPlus 支援功能較為多一點。

Newtonsoft.Json 的功能較為強大,但 System.Text.Json 的效能比較好,兩者間的差異請參考 System.Text.Json 與 Newtonsoft.Json 的比較

  • 壓縮相關套件:
    • SharpZipLib:支援多種壓縮格式的壓縮套件。
    • DotNetZip:操作較為簡單、直覺的 Zip 壓縮套件。
  • 如果只使用 Zip 的壓縮、解壓縮,且未使用 NPOI 的情況下,建議使用 DotNetZip 就好,由於 NPOI 相依於 SharpZipLib,所以如果有裝 NPOI 的情況下,自行評估是否要在專案裝兩個壓縮套件。
  • 有些壓縮作法是在主機上放置如「7z.exe」等壓縮軟體,在 C# 使用 Command Line 來執行軟體進行壓縮,但如果檔案有加密要求時,就因為必須要在主機產生檔案(違反資料不落地原則),且壓縮失敗或壓縮完刪檔失敗時,就會在主機殘留有明文內容的檔案,造成資訊外流之風險。
  • .NET 本身也有支援 System.IO.Compression 處理壓縮相關功能。

Fluent Assertions 8.0 開始,商業用途需購買商業許可證。

  • GitVersion 設定較為複雜,可以針對分支建立、合併與不同的分支名稱等來建立各版本號規則,MinVer 則是直接靠設定 Git Tag 來決定版本號。

異動歷程

  • 2025-04-06:
    • 增加「自動更新延伸模組」設定說明。
    • 移除「Code Cleanup on Save」,Visual Studio 2022 已經內建很久,不用特別列出來。
    • 更新部分套件的說明。
tags: Visual Studio NuGet