「.NET」標籤的文章
帶有「.NET」標籤的文章共 49 篇,依發布日期由新到舊排列。
-
Windows 應用程式的工作列通知區常駐與 Toast 通知 —— NotifyIcon 的陷阱與 AppNotification 的選型
本文整理將業務用 Windows 應用程式常駐於工作列通知區,並透過 Toast 通知告知使用者的實作要點。內容涵蓋 NotifyIcon 的正確用法與「關閉後仍留在通知區」的設計、檔案總管重新啟動時的重新註冊、三種 Toast API(Windows App SDK AppNotification / Comm...
-
VB6 應用程式能用到什麼時候 ── 執行環境的支援現況與務實的 .NET 遷移做法
VB6 應用程式究竟能用到什麼時候?本文整理 VB6 執行環境的支援政策(Windows 11 也在支援範圍內)與 IDE 支援早已終止這種不對稱現況,並以實務指南的形式,說明全面重寫、自動轉換、階段性遷移的判斷表、遷移前的資產盤點、VB6 與 .NET 的不相容之處,以及 C# 與 VB.NET 的選擇。
-
業務應用程式的日本年號・國定假日・結算日處理 ── 抗改元設計與 JapaneseCalendar・營業日計算實務
報表要顯示「令和8年」、營業日計算要排除國定假日、20日結算次月底付款──日本業務應用程式特有的日期處理,背後藏著「日後會變動的規格」:改元、國定假日的法規修訂、月底的進位。本文整理以 JapaneseCalendar 顯示年號、抗改元的設計方式,國定假日不可寫死在程式碼中的原因,以及運用內閣府 CSV 建立國定...
-
WinForms/WPF 應用程式的多語言化 ── resx、附屬組件與文化特性切換的實務
本文從實務角度整理 Windows 桌面應用程式的多語言化,包括 CurrentCulture 與 CurrentUICulture 的差異、resx 與附屬組件(Satellite Assembly)所構成的資源機制、WinForms 的 Localizable 屬性、WPF 現實可行的方式選擇、執行時的語言切...
-
CSV不是「純文字」而已 ── C# 業務應用程式的 CSV 實務(字元編碼・Excel 相容性・注入攻擊防範)
整理業務應用程式在 CSV 讀寫時容易出事故的典型模式──用 Split(',') 自行解析、無 BOM 的 UTF-8 在 Excel 中亂碼、開頭零消失、CSV 注入攻擊──從 RFC 4180 的規則、.NET 中 Shift_JIS 的處理方式(CodePagesEncodingProvider),到用 ...
-
不要用 using 包住 HttpClient ── C# 商用應用程式的 HTTP 通訊實務(生成模式・逾時・重試)
C# 的 HttpClient 若每次都用 using 生成,會導致 Socket 枯竭;改用 static 又無法跟上 DNS 變更──本文從 Windows 商用應用程式的實務角度,整理這兩大問題的成因,以及透過 PooledConnectionLifetime、IHttpClientFactory 的正確生...
-
用 PerfView 與 dotnet-trace 找出「變慢」的原因 ── .NET 效能調查實務入門
當商用應用程式「變慢」「CPU 卡住不動」「偶爾當掉」時,該用哪個工具看什麼?本文整理 PerfView 與 dotnet-trace 的角色分工、CPU 取樣的讀法(inclusive/exclusive)、用 ThreadTime 調查阻塞時間,以及與 EventSource 自訂事件組合使用,涵蓋實務上的效...
-
Windows 事件記錄・ETW 入門 ── 讓業務應用程式的日誌搭上 OS 標準機制
Windows 業務應用程式的日誌,是不是只靠檔案日誌解決?事件記錄與 ETW,是維運人員與 OS 標準工具能看到的另一個層級的記錄。本文說明三種手段的分工、.NET 的寫入方式、透過 EventSource 進行 ETW 儀器化、收集與調查的實務,以及來源未註冊、日誌肥大化等常見陷阱。
-
不只是 appsettings.json ── Windows 商用應用程式的組態管理實務(環境別設定・機密資訊・寫入位置)
本文從實務角度整理 Windows 商用應用程式的組態管理,涵蓋 appsettings.json 的分層、IConfiguration 與 IOptions/IOptionsSnapshot/IOptionsMonitor 的選用方式、環境別設定、可寫入設定的存放位置、機密資訊的處理、執行期設定變更,以及從 a...
-
Windows 業務應用程式的列印與 PDF 輸出 ── System.Drawing.Printing / WPF / 報表函式庫的取捨
本文以要件別判斷表整理 PrintDocument 的 WinForms 列印、WPF 的 FlowDocument/FixedDocument 列印,以及 PDF 輸出的各種選項。並從實務角度說明分頁控制、DPI 落差等實作陷阱,以及從 Windows 服務列印、依賴預設印表機的風險。
-
把OSI參考模型看得明明白白 ── 解剖一個HTTP請求的七層結構
不靠死記硬背來理解OSI參考模型,而是看真實的東西。本文用C#組出一個承載HTTP GET請求的Ethernet訊框並加以解剖,透過十六進位傾印和Wireshark確認L2〜L7如何以位元組序列的形式一層層物理地嵌套在一起。文章從實務角度整理各層與.NET API(HttpClient/SslStream/Soc...
-
如何理解 Windows 的工作階段隔離 ── Session 0・RDP・多使用者同時執行
整理 Windows 應用程式開發者容易混淆的「工作階段」概念。說明服務無法顯示 UI 的 Session 0 隔離原因、RDP 連線時工作階段的行為、具名物件的工作階段隔離,以及共用 PC・RDS 環境常見的設計失誤,從實務角度解說。
-
用 WinDbg + SOS 解讀當機傾印檔 ── 收集之後的實務分析入門
本文說明如何用 WinDbg 與 SOS 擴充功能實際讀取已收集的 Windows 當機傾印檔。內容涵蓋符號路徑設定、以 !clrstack・!pe・!dumpheap -stat・!gcroot 追蹤例外與記憶體洩漏的方法、原生當機的 !analyze -v,以及與 dotnet-dump analyze 的使...
-
防止 Windows 應用程式重複啟動 ── 具名 Mutex 與重複執行時的視窗前置
整理業務用 Windows 應用程式的常見需求「不讓同一個應用程式啟動兩次」,如何用具名 Mutex 實作。涵蓋 Global\ 與 Local\ 命名空間差異在 RDP 環境中的陷阱、擁有執行緒限制與 AbandonedMutexException、考量 SetForegroundWindow 限制下的既有執行...
-
在 C# 中安全呼叫 Win32 API — P/Invoke 實務指南(DllImport / LibraryImport / CsWin32)
本文整理在 C# 中透過 P/Invoke 呼叫 Win32 API 或原生 DLL 時的實務要點:DllImport 與 LibraryImport 的差異、CsWin32 自動產生簽章、字串封送的陷阱、用 SafeHandle 管理控制代碼、SetLastError 與錯誤處理、結構的 StructLayou...
-
在 WinForms/WPF 應用程式中導入 Entra ID 驗證 ── MSAL.NET 與 WAM 代理的實務架構
從實務角度整理在 WinForms/WPF 桌面應用程式中導入 Entra ID(原 Azure AD)驗證的做法。內容涵蓋公用客戶端的概念、ROPC 廢除現況、應用程式註冊、MSAL.NET 的 AcquireTokenSilent 模式、WAM 代理、權杖快取持久化,以及導入判斷與維運上的陷阱。
-
業務應用程式的日期時間與時區 ── 從 DateTime 的陷阱到 UTC 儲存原則、測試設計
伺服器搬遷後時間整整差了 9 個小時、只有海外據點的日期會變成前一天──本文從 DateTime 的 Kind 與隱式轉換整理日期時間事故的根本原因。內容涵蓋與 DateTimeOffset 的取捨、UTC 儲存與 ISO 8601 原則、TimeZoneInfo 與夏令時間、和 SQL Server/SQLit...
-
Windows 桌面應用程式的 UI 自動測試 ── UI Automation 的原理與用 FlaUI 打造不易損壞的測試
本文從 Windows UI Automation 的原理(樹狀結構、AutomationId、控制項模式)整理 WinForms/WPF 應用程式的 UI 自動測試。內容涵蓋以 FlaUI 實作的最小範例、WinAppDriver 的現況、透過 AutomationId 設計與條件等待讓測試不易損壞的方法,以及...
-
WPF 高 DPI 對應──「不是應該對 DPI 很強嗎」卻仍模糊、暈邊的原因與對策
WPF 以 DIP(1/96 英吋)進行版面配置,一開始就是 System DPI Aware,但移到 DPI 不同的螢幕時整體會暈邊,點陣圖與細線也會模糊。本文從實務角度整理原因判斷、.NET Framework 4.6.2/.NET 上的 Per-Monitor DPI 對應宣告方式、UseLayoutRou...
-
C# 操作 Excel 時 EXCEL.EXE 殘留的問題 ── COM 參照釋放模式與替換判斷
本文從 COM 參照計數與 RCW 的運作原理,整理 C# 透過 Microsoft.Office.Interop.Excel 操作 Excel 時 EXCEL.EXE 進程殘留的問題。內容涵蓋「兩個點規則」的陷阱、Marshal.ReleaseComObject 派與 GC 派兩種釋放模式、以 Hwnd 定位 ...
-
WinForms 的高DPI支援 - 4K螢幕顯示模糊、版面跑掉的原因與實務對策
本文從 DPI 虛擬化與 DPI 感知模式(System Aware / Per-Monitor V2)的角度,整理 WinForms 應用程式在4K螢幕、150%縮放環境下顯示模糊、版面跑掉的原因,並說明 .NET 與 .NET Framework 各自的設定方式、AutoScaleMode 與設計工具的陷阱,...
-
Windows 的行程間通訊該怎麼選 ── 具名管道 / TCP / gRPC / 共享記憶體 / COM 判斷表
整理 Windows 應用程式之間該如何選擇溝通方式。以判斷表整理具名管道、本機 TCP、gRPC、共享記憶體、檔案協作、COM 各自的強項與陷阱,並從實務角度說明 UI+服務分離・32bit/64bit 橋接・權限邊界等典型架構,以及具名管道的實作範例。
-
在 C# 中將 SQLite 用於業務應用程式 ── WAL 模式・排他控制・損毀對策・與 EF Core 的取捨
整理用 Microsoft.Data.Sqlite 把 SQLite 整合進業務用 Windows 應用程式的實務知識:連線字串與連線池、WAL 模式的原理、SQLITE_BUSY 與寫入路徑單一化、用交易加速、型別對應的陷阱、用 VACUUM INTO 備份,一直到該在什麼場合使用 EF Core。
-
Windows 服務的建立與維運 ── 從工作排程器的取捨到 BackgroundService 服務化
常駐處理該做成 Windows 服務,還是工作排程器就足夠?本文整理判斷表,以及用 .NET Worker Service(UseWindowsService)建立服務的方法、執行帳戶、復原選項、事件記錄、安全停止處理,從實務角度梳理上線維運所需的設計。
-
IE 模式之後改用 WebView2 就好嗎 ── ActiveX 無法運作的限制與現實的遷移設計
本文從內部系統的角度,整理 WebView2 的基本結構、Evergreen 與 Fixed Version 兩種配布策略、使用者資料資料夾的陷阱、原生與 Web 的連結方式,並在「ActiveX 無法運作」這一限制的前提下,梳理出脫離 IE 模式依賴系統的現實遷移順序。
-
Windows應用程式資料儲存位置怎麼選 ── SQLite / JSON / 登錄檔 / Access 判斷表
Windows桌面應用程式的資料該存在哪裡、用什麼格式儲存?本文整理AppData/ProgramData的使用區分,以及SQLite、JSON檔案、登錄檔、Access(.accdb)各自的優勢與陷阱,並附判斷表,從實務角度說明防止資料損毀與位元數問題等注意事項。
-
PDB(程式資料庫)是什麼 ── 理解偵錯資訊、符號與 Source Link
整理 PDB(Program Database / 程式資料庫)是什麼、裡面有什麼、沒有什麼,並從實務角度說明 Debug / Release、Portable PDB、Source Link、符號伺服器、傾印分析之間的關係。
-
什麼是 Roslyn?── 用編譯器的視角讀懂、修正、產生 C# 程式碼
整理 Roslyn(.NET Compiler Platform)的概觀,包括 Syntax Tree、SemanticModel、Workspace、Analyzer、Source Generator,以及在實務上的使用場合與注意事項。
-
委外・委託開發 Windows 應用程式前該整理的事項
在委外・委託開發 Windows 應用程式之前,整理既有軟體改版、設備整合、COM/ActiveX、發布與更新、維護等應留意的重點。
-
在 .NET Framework / .NET 中使用代數資料型別 ── 用型別表示狀態與結果的設計
本文整理在 .NET Framework 與 .NET 中使用代數資料型別,尤其是直和型別(判別共用體)的方法與優點,涵蓋 F#、C# 的類別階層、record、OneOf,以及 C# 15 union 預覽功能。
-
正確處理 Windows 偽裝權杖 - 執行緒層級的權限借用與安全還原方式
本文整理 Windows 偽裝權杖的實務安全處理方式,涵蓋存取權杖、主要權杖、執行緒權杖、偽裝層級、RevertToSelf,以及 .NET 的 WindowsIdentity.RunImpersonated。
-
TCP 中「Send 單位=Receive 單位」的誤解 ── 把 TCP 視為位元組串流來設計接收邏輯
在 TCP 通訊中,若誤以為呼叫 Send / Write 的單位可以直接對應到接收端的單位,就會發生封包分割、合併、亂碼、協定損壞等問題。本文整理把 TCP 視為位元組串流、在應用層自行進行訊框化(framing)的思考方式,並提供 .NET / C# 的實作範例。
-
在 .NET 中區分 GC 延遲與記憶體洩漏 ── 觀測、比較、證明記憶體增長的實務步驟
本文整理如何用 dotnet-counters、dotnet-gcdump、dotnet-dump 來判斷 .NET 應用程式的記憶體增加,究竟是等待垂圾回收(GC)造成的,還是真正的記憶體洩漏。
-
在 C#(CSharp)中執行 PowerShell 並以物件形式接收結果
本文從實務角度整理如何從 C# 啟動 PowerShell,並以 PSObject 而非字串來接收結果,涵蓋 PowerShell SDK、AddCommand、AddParameter、BaseObject、Properties 到錯誤處理。
-
Windows為何演變成現在的樣子:從開發者角度看歷代Windows的演進
本文從相容性、穩定性、權限管理、驅動程式、Win32、.NET、資安等Windows應用程式開發者的角度,整理Windows 95到Windows 11的變化,而不是單純以外觀年表的方式呈現。
-
ClickOnce 是什麼 - 以實務視角整理機制、更新、適合場面・不適合場面
本文以實務視角整理 ClickOnce 是什麼,從 manifest、快取、更新、簽章的構造,到適合公司內部 .NET 桌面業務應用程式的案件與不適合 machine-wide 或 service、driver 等深度 OS 整合的案件,幫助讀者判斷是否採用並掌握 deploymentProvider 與簽章運營要點。
-
Windows 應用安全處理子行程的 checklist - Job Object、結束傳播、標準輸入輸出、watchdog 的最佳實務
在 Windows 應用上安全處理子行程,關鍵不在挑啟動 API,而是設計行程樹的擁有者與結束流程。本文整理 Job Object 的 KILL_ON_JOB_CLOSE、GUI 與 console 的 graceful shutdown、stdio 平行抽乾與 EOF、watchdog 配置與 restart ...
-
在 Windows 上,單一執行檔(single binary)能做到什麼程度 - 能收進 1 個 EXE 的範圍、無法消除的 Windows 依賴、以及發布前的判斷表
整理在 Windows 上把應用做成單一 EXE 時的真正界線:發布物收成 1 個、把 runtime 同捆、免 installer、降低 OS 依賴是 4 個層次。搭配 .NET、C++、WebView2、WinUI、服務驅動的判斷表,幫你在發布設計階段做對選擇。
-
序列通訊應用的陷阱 - 先釐清 1 byte 單位、逾時、流控、重連、USB 轉換、UI 凍結
從設備整合與儀器控制的實作現場出發,整理序列通訊應用最容易踩到的陷阱。把訊息邊界、逾時語意、流控線設定、single writer、session 重連與 hex dump 日誌一一拆開,幫助讀者把「偶爾才壞」的 byte 序列處理改造成可預測且容易調查的結構。
-
將 .NET Framework 遷移到 .NET 之前該確認的事 - 在著手前就決定勝負的實戰檢核表
整理將 .NET Framework 業務應用程式遷移到現代 .NET 之前必須先盤點的論點。涵蓋著地版本、Windows 專用前提的取捨、不再支援的 API、共用函式庫切法、第三方部件、運營與 CI/CD,幫助在著手前釐清範圍並降低遷移風險。
-
.NET 的 Generic Host 是什麼 - 先整理 DI、設定、日誌、BackgroundService
本文整理 .NET Generic Host 的真面目,並把 DI、設定、日誌、IHostedService 與 BackgroundService 的關係,連同 Host.CreateApplicationBuilder 與 WebApplicationBuilder 的位置一次拉平。讀完能判斷短命主控台工具與...
-
.NET 的 Native AOT 是什麼 - 先釐清與 JIT、ReadyToRun、trimming 的差異
把 .NET 的 Native AOT 與 JIT、ReadyToRun、self-contained、single-file、trimming、source generator 放在一起釐清,並從啟動、發布、相依性的角度整理它合適與不合適的情境,幫助讀者判斷該不該採用。
-
PeriodicTimer / System.Threading.Timer / DispatcherTimer 的區分使用 - 先整理 .NET 的定期執行
整理 .NET 中 PeriodicTimer、System.Threading.Timer、DispatcherTimer 的差異與使用場景,從執行緒、async 流程、callback 重疊三個角度切入,協助你在 worker、ThreadPool 背景處理及 WPF UI 更新中選對計時器,避免常見的反面模...
-
用 Native AOT 把 C# 做成原生 DLL 的方法 - 用 UnmanagedCallersOnly 從 C/C++ 呼叫
從現有 C/C++ 應用程式以 in-process 方式呼叫 C# 邏輯時,本文示範以 Native AOT 將類別庫發佈為原生 DLL,並用 UnmanagedCallersOnly 公開 cdecl 進入點。透過 handle、錯誤碼與扁平 C ABI 設計交界面,整理適用情境、字串處理與例外不跨越邊界等實...
-
把 Generic Host / BackgroundService 帶進桌面應用程式的理由 - 啟動・壽命・graceful shutdown 的整理會輕鬆很多
整理把 .NET Generic Host 與 BackgroundService 帶進 WPF / WinForms 桌面應用程式的理由,把啟動、lifetime、graceful shutdown 集中於入口管理。透過 StartAsync / ExecuteAsync / StopAsync 的職責分擔避開...
-
ActiveX / OCX 現在如何處理 - 保留・包裝・取代的判斷表
整理在實務專案中遇到 ActiveX 或 OCX 時的判斷流程,從 UI 部件、機器控制、報表、瀏覽器依賴到 32bit 與 64bit 的牆壁,依照保留・包裝・取代三種選項列出對照表與決策流程,並說明註冊發佈與 STA 等容易絆倒的細節,幫讀者選出最低成本的下一步。
-
以一頁整理 WPF / WinForms 的 async/await 和 UI 執行緒 - await 後的回歸處、Dispatcher、ConfigureAwait、.Result / .Wait() 的卡點
本文以一頁的篇幅整理 WPF 與 WinForms 中 async/await 與 UI 執行緒的關係。從 await 後接續的回歸處、Dispatcher 與 Invoke 的選擇、ConfigureAwait(false) 真正的意義,到 .Result 與 .Wait() 為何鎖死訊息迴圈,並附反面模式與審...
-
FileSystemWatcher 的使用方法與注意事項 - 漏掉、重複通知、完成判定的陷阱
本文整理 FileSystemWatcher 的正確用法。把事件視為跡象而非完成通知,將通知摺疊為重新掃描請求,由傳送端以 temp 後 rename 明示完成,多 worker 以原子性 claim 取得所有權,最後以 full rescan 與 idempotency 收尾,讓監視變得穩固可重入。
-
C# async/await 的最佳實踐 - Task.Run 與 ConfigureAwait 的判斷表
本文以 .NET 6 之後的一般 C# 開發為前提,將 async/await 周邊的判斷整理成可立即查的對照表。先依 I/O 等待與 CPU 計算分流,再決定 Task.Run、Task.WhenAll、Parallel.ForEachAsync、Channel、PeriodicTimer 的選用,並涵蓋 Co...