# 常用套件整理 年紀大了,記憶不好,每次安裝 Visual Studio 都要花時間查一下之前安裝了哪些套件,及套件功能是什麼,所以寫一篇文章記錄下來。 ## Visual Studio 的擴充套件 * [Productivity Power Tools](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.ProductivityPowerPack2022):下列套件屬於「Productivity Power Tools」 同捆包的一部分。 * [Double-Click Maximize 2022](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.Double-ClickMaximize2022):點擊兩下來最大化 Visual Studio 視窗。 * [Fix Mixed Tabs](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.FixMixedTabs2022):偵測程式碼是否同時有 Tabs 和空格,並提供轉換為其中之一。 * [Match Margin](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MatchMargin2022):Highlights 所有游標所指向的文字。 * [Middle Click Scroll](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MiddleClickScroll2022):使用滑鼠滾輪來移動文檔。 * [Shrink Empty Lines](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.SyntacticLineCompression2022&ssr=false#overview):縮小空白行高度。 * [Solution Error Visualizer](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.SolutionErrorVisualizer2022):在 Solution Explorer 顯示錯誤提示。 * [Time Stamp Margin](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.TimeStampMargin2022):在 Debug 模式下,輸出視窗增加顯示時間訊息。 * [Dev Essentials](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.ProductivityPowerPack2022):下列套件屬於「Dev Essentials」 同捆包的一部分,此套件在 Visual Studio 2019 以前叫 「[Web Essentials](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.WebEssentials2019)」 。 * [File Icons](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileIcons):美化 Solution Explorer 裡的檔案圖示。 * [Bundler & Minifier](https://github.com/failwyn/BundlerMinifier):將 CSS、JavaScript 或 HTML 打包(Bundle)和最小化(Minify)。 * [SVG Viewer](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.SvgViewer):增加 SVG 的預覽,及優化編輯器的相關功能。 * [Editor Enhancements](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.EditorEnhancements64):強化編輯器功能,如程式碼排序、文字編碼等。 * [Dummy Text Generator](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.DummyTextGenerator):在產建畫面 Sample 時,快速產出一些無意義的文字。 * [Markdown Editor v2](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.MarkdownEditor2):在編輯器增加 Markdown 相關功能。 * [JavaScript Snippet Pack](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.JavaScriptSnippetPack):JavaScript Snippet 擴增。 * [Image Optimizer](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.ImageOptimizer):壓縮圖片大小。 * [HTML Snippet Pack](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.HTMLSnippetPack):HTML Snippet 擴增。 * [Web Compiler](https://github.com/failwyn/WebCompiler):編譯 LESS、Sass Stylus、JSX、ES6 和 CoffeeScript 檔案。 * [SlowCheetah](https://github.com/Microsoft/slow-cheetah):讓 XML 和 JSON 檔案可以像 Web Application Project(WAP) 的 Web.config 一樣支援 Coinfig Transform。 * [GhostDoc](https://submain.com/ghostdoc/):快速產生 XML 註解。 * [ResXManager](https://github.com/dotnet/ResXResourceManager):提供便於維護資源檔(resx)的 UI。 * [Editor Guidelines](https://github.com/pharring/EditorGuidelines):提供補助線來判斷程式碼過長,我習慣會在加在 80 char、100 char 和 120 char 的位置。 * [T4 Editor](https://marketplace.visualstudio.com/items?itemName=TimMaes.t4editor):強化 T4 範本語法的支援。 * [VSColorOutput](https://marketplace.visualstudio.com/items?itemName=MikeWard-AnnArbor.VSColorOutput64):輸出視窗增加顏色顯示。 :::info * 「Productivity Power Tools」和「Web Essentials」以前都是單一套件,後續不知哪一版本的 Visual Studio 開始將其底下各功能改為獨立套件,變成可選擇獨立安裝各功能套件,或藉由安裝同捆包來一次安裝。 * 安裝這類同捆包時,是在安裝時會忽略已獨立安裝的套件。 * 早期我是直接安裝同捆包,後續因為以下原因,改成安裝獨立套件: * 由於 Visual Studio 2022 改為 64 位元時,很多套件都無法支援,或是有些功能改為 Viusal Studio 內建,(「[Zen-Coding](https://github.com/madskristensen/ZenCodingVS)」),導致同捆包裡有在使用套件比重有逐漸降低的跡象。 * 以前安裝同捆包,卻沒注意同捆包有哪些套件,導致很多功能我以為是內建的,結果是擴充套件的功能,而不同時期安裝的同捆包,實際安裝的套件都不一樣,有可能是新版的 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](https://learn.microsoft.com/zh-tw/aspnet/core/mvc/views/view-compilation?view=aspnetcore-7.0&tabs=visual-studio):動態編譯 ASP.NET Core Razor 檔案。 * Entity Framework Core: * Microsoft.EntityFrameworkCore:EF Core 基本功能。 * Microsoft.EntityFrameworkCore.SqlServer:SQL Server 資料庫提供者,其它資料庫請參考「[資料庫提供者](https://learn.microsoft.com/zh-tw/ef/core/what-is-new/nuget-packages#database-providers)」:常見的關係資料庫功能。 * Microsoft.EntityFrameworkCore.Design:Entity Framework 設計工具,執行像是 Migration 之類的功能。 * Microsoft.EntityFrameworkCore.Relational:常見的關係資料庫功能。 * Microsoft.EntityFrameworkCore.Tools:主控台工具。 :::info 非建置 Entity 的專案,正常來說只要安裝以下套件就好: * Microsoft.EntityFrameworkCore。 * Microsoft.EntityFrameworkCore.SqlServer 或其它資料庫提供者。 * Microsoft.EntityFrameworkCore.Relational。 ::: * Microsoft.AspNet.WebApi.Client:簡化 HttpClient 的操作。 * [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet):用來簡化 MVVM 架構開發的套件。 * [Autofac](https://autofac.org/):DI 套件。 * [AutoMapper](https://automapper.org/):將 Object 值映射到另一個 Object。 * [Dapper](https://github.com/DapperLib/Dapper):輕量化的 ORM 套件。 * [FluentValidation](https://docs.fluentvalidation.net/en/latest/):建構強類型驗證規則。 * [Humanizer](https://github.com/Humanizr/Humanizer):功能非常強大的字串轉換工具,可將時間、數字轉換成口語化英文、英文單複數轉轉換,及各種字句 Format。 * [CsvHelper](https://joshclose.github.io/CsvHelper/):CSV 套件。 * [NPOI](https://github.com/nissl-lab/npoi):免費的 Excel 套件。 :::info * 原本還有另外一個功能更強大 Excel 套件是 [EPPlus](https://www.epplussoftware.com/),但是它只有在 EPPlus 4 以前可以免費使用,EPPlus 5 以後,授權改為「[Polyform Noncommercial 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0/)」,無法用於商業環境,但如果只是個人使用則沒問題。 * NPOI 有支援「XLS」格式,EPPlus 僅支援「XLSX」,但個人經驗,目前 EPPlus 支援功能較為多一點。 ::: * [iTextSharp](https://github.com/itext/itextsharp):PDF 套件。 * [NLog](https://nlog-project.org/):Log 套件。 * [SSH.NET](https://github.com/sshnet/SSH.NET):SFTP 套件。 * [FluentFTP](https://github.com/robinrodricks/FluentFTP):FTP 套件。 * JSON 相關套件: * [Newtonsoft.Json](https://www.newtonsoft.com/json):常見的 JSON 套件,較新版的 .NET Framework 版本預設安裝套件。 * [System.Text.Json](https://www.nuget.org/packages/System.Text.Json):.NET Core 3.0 以後預設使用的 套件。 :::info Newtonsoft.Json 的功能較為強大,但 System.Text.Json 的效能比較好,兩者間的差異請參考 [System.Text.Json 與 Newtonsoft.Json 的比較](https://learn.microsoft.com/zh-tw/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft?pivots=dotnet-7-0)。 ::: * 壓縮相關套件: * [SharpZipLib](https://github.com/icsharpcode/SharpZipLib):支援多種壓縮格式的壓縮套件。 * [DotNetZip](https://www.nuget.org/packages/DotNetZip/):操作較為簡單、直覺的 Zip 壓縮套件。 :::info * 如果只使用 Zip 的壓縮、解壓縮,且未使用 NPOI 的情況下,建議使用 DotNetZip 就好,由於 NPOI 相依於 SharpZipLib,所以如果有裝 NPOI 的情況下,自行評估是否要在專案裝兩個壓縮套件。 * 有些壓縮作法是在主機上放置如「7z.exe」等壓縮軟體,在 C# 使用 Command Line 來執行軟體進行壓縮,但如果檔案有加密要求時,就因為必須要在主機產生檔案(違反資料不落地原則),且壓縮失敗或壓縮完刪檔失敗時,就會在主機殘留有明文內容的檔案,造成資訊外流之風險。 * .NET 本身也有支援 `System.IO.Compression` 處理壓縮相關功能。 ::: * 單元測試相關套件: * [NUnit](https://nunit.org/):NUnit 框架。 * [NUnit3TestAdapter](https://www.nuget.org/packages/nunit3testadapter/):NUnit 與 Visual Studio 的 Adapter。 * [NSubstitute](https://nsubstitute.github.io/):單元測試隔離框架。 * [Fluent Assertions](https://fluentassertions.com/):將單元測試的 Assert 寫的較為口語化。 :::warning Fluent Assertions 8.0 開始,商業用途需購買商業許可證。 ::: * [Microsoft.VisualStudio.SlowCheetah](https://www.nuget.org/packages/Microsoft.VisualStudio.SlowCheetah):讓 XML 和 JSON 檔案可以像 Web Application Project(WAP) 的 Web.config 一樣支援 Coinfig Transform,需搭配 Visual Studio 延伸模組的「SlowCheetah」使用,詳情參考 [ASP.NET Framework 裡,有關 Web.config (App.config) 的應用](/K0ALoDQWSSKmWy5jMWEjPA#非-Web-專案發佈)。 * [DefaultDocumentation](https://github.com/Doraku/DefaultDocumentation):將 Visual Studio XML 註解轉為使用 Markdown 語法的 API 文件。 * 專案版本號相關套件: * [GitVersion.MsBuild](https://gitversion.net/docs/usage/msbuild):使用 Git 流程設定專案版本號。 * [MinVer](https://github.com/adamralph/minver):根據 Git Tag 來設定專案版本號。 :::info * GitVersion 設定較為複雜,可以針對分支建立、合併與不同的分支名稱等來建立各版本號規則,MinVer 則是直接靠設定 Git Tag 來決定版本號。 ::: ## 異動歷程 * 2025-04-06: * 增加「自動更新延伸模組」設定說明。 * 移除「Code Cleanup on Save」,Visual Studio 2022 已經內建很久,不用特別列出來。 * 更新部分套件的說明。 ###### tags: `Visual Studio` `NuGet`