Category: .net

針對需要支援多語系的場合,.NET 標準做法是為各語系建立專屬資源檔,放入該語系的文字翻譯、專用圖示,Visual Studio 會將這些資源檔編譯成衛星組件(Satellite Assembly)。如此,執行時可依環境彈性載入,有專屬資源就用,沒有就用英文;開發時也可依需求逐步增加新語系,很方便。...

雖然有學過 IEnumerable 跟 yield return,遇到需要傳回集合或陣列的場合,我慣用的寫法還是一次將資料整理好,傳回 IList<T> 或 T[],很少想到用 IEnumerable 跟 yield return。大部分情況,兩種做法差異不大,但前陣子研究數百萬個檔案之...

前陣子研究某個開源專案的密碼保存做法,想確認加密方法是否安全,學到一招很方便的 .NET 無腦加解密寫法,筆記備忘。 之前介紹過 PowerShell 有個 SecureString,可呼叫 Windows DPAPI (Data Protection API) 用不同機器不同登入身分專屬的金鑰加解...

Side Project 有段程式從外部 API 取得一個 DateTimeKind.Unspecified 的時間值,彙整時用 ToUniversalTime() 轉換為 UTC 時間再轉 JSON 儲存,依據規格該日期時間以台北時間為準,開發及測試階段結果如預期,不覺得這寫法有什麼不對。 不過,...

我想在 Side Project 加上發通知到手機的功能,原本想用 LINE,但因為通知對象就只有我自己,找到更簡單的做法 - Slack。 用 Slack 免費版建個一人 Workspace,開個一人頻道(如果加上機器人應該算兩個人),只需簡單設定跟幾行程式就搞定。在手機安裝 Slack App,...

同事分享地雷一枚。先踩到 ODP.NET OracleDataReader 數字型別對映陷阱,未指定 decimal 交由 ODP.NET 自由決定,某個 NUMBER(10, 2) 欄位被轉成 double,生出 1519222.6099999999 這種浮點數字,之後再陷入數字到底是 .6099...

昨天 PO 了金魚都能懂的 .NET 6 開源程式 EXE 製作法,有好些讀者貼心提醒我可以用 Github Action 自動編譯成 EXE,方便完全不懂程式的朋友直接下載。坦白說,一開始有閃過自動編譯的想法,但很快我就決定把握這個科普 .NET 與程式碼是怎麼變成程式的機會! (話說,九年...

昨天在 Windows 11 啟動獨立 IE 應用程式展示的復刻版 ClassicIE,有讀者敲碗希望能提供 EXE 下載。 這一年來我陸續寫了一些 .NET 6 小工具,清一色都是用 Github 分享原始碼,沒想過直接提供 EXE。主要原因是 EXE 檔不透明,永遠要面對可能窩藏病毒木馬的質疑,...

當代量產型製造業幾乎都是採用生產線作業,以汽車為例,會分成焊接、烤潻、組裝、測試等站,各站依處理時間調整人力與設備數量,以求站與站之間能無縫接軌,將閒置及等待時間降到最低,達到最大產能。而我們開發系統時,若遇到包含多個步驟的大量批次作業,每個步驟具有一定複雜度、涉及資源不一,此時就可借用生產線概念,...

身為性急又沒耐心的現代王藍田,我習慣為日常作業寫小工具放在桌面,需要時點兩下,避免被瑣事影響心情。簡單作業會用 PowerShell 寫,邏雜複雜的則會開個 Console Application 專案用 C# 開發。 .NET 6 推出的 Top-Level Statements 神奇地簡化 Pr...

我很愛用程式產生器節省無謂手工,其中有個經典應用是用程式產生器將服務元件轉成 WebAPI/MVC Controller + 客戶端呼叫程式庫,原理不難,程式產生器參照 C# DLL,用 Reflection 找出方法及所需參數,再從 XML Documentation 註解檔(.xml)取出對應說...

昨天分享 .NET 4.5.2 專案參照 4.6.1 專案,只有警告訊息但編譯會出錯的茶包,靠將 A 專案升為 4.6.1+ 解決,但愈想愈不對... 若低版本 .NET 參照高版本註定無法運作,為什麼被歸為警告而非錯誤?而 .NET 4.X 採「就地更新」(In-Place Update)政策,在...