C# 網頁轉圖檔 WebAPI - 青春版
早先介紹過用 Puppeteer Sharp + Chromium 寫出 C# 網頁擷圖服務。同事反映會遇到 Chrom 無故卡住無回應的現象,依過去經驗,這類 Chrome 層級的疑難排除非我能力所及,解決只能靠運氣,只能祝福原力與他同在。。 回家沒事亂爬文找替代方案,發現一個有趣解法 - 使用 ... Read More
View Article用 ASP.NET Core 寫桌面 GUI 應用程式 - Electron.NET
三不五時難免有寫桌面 GUI 程式的需求,總讓我天人交戰。雖然寫 WPF 難不倒我,但網頁才是我累積超過一萬小時的拿手絕活。組 XAML 搞 INotifyPropertyChanged 邊查邊寫滿頭大汗之際 我總忍不住碎念,要是能用 Web 寫多好? Select/Input/Button 搭 V... Read More
View ArticleElectron.NET API 快速巡覽
要用 ASP.NET Core 寫 Electron 程式,除了原本的網頁開發技能,還得學習透過 Electron API 與桌面環境互動,才會像真正的桌面 GUI 應用程式。若只是把 Electron.NET 程式當成純網頁寫,無法自由存取本機檔案、在工具列做變化,那跟用 Console 程式跑網... Read More
View Article在 Electron 中使用 jQuery 與網頁偵錯技巧
動手寫 Electron.NET 沒多久就踩到坑。ASP.NET Core 專案預設會載入 jQuery,但在 Electron 中不能用,出現 jQuery is not defined 錯誤。 調查 jQuery 問題前,先介紹 Electron 超級好用的偵錯功能。 網頁在 Electron ... Read More
View Article在 ASP.NET Core Middleware 蒐集 Razor Pages 與 MVC 的方法資訊
我想寫程式捕捉 AJAX 呼叫 Razor Pages OnPostXXXX() 的執行錯誤(延伸閱讀: Razor Pages 實作 Ajax 呼叫,出現時統一回傳 ApiError JSON (延伸閱讀:範例教學:使用 ASP.NET MVC 打造 WebAPI 服務)。查了一下,Razor P... Read More
View ArticleDapper DynamicParameters + ODP.NET 中文亂碼問題
自從在 Hacking 樂無窮:修正 Dapper+ODP.NET 無法寫入 Unicode 問題想出 FixOdpNetDbTypeStringMapping 大絕,以為我已經收服 ODP.NET + Dapper Unicode 妖魔,並沒有,昨天又被咬一口。 踩中的是 DynamicParam... Read More
View ArticleASP.NET MVC5 - 自製 js/css 自動版本參數防止 Cache 舊版惹禍
系統上線再踩到 js/css 換版但使用者瀏覽器續用 Cache 舊版出錯的坑,嚴格說來是低級錯誤,最簡單做法是 URL 加上 ?v=版本參數,每次換版就改參數,即可保證不會讀到 Cache 舊版惹禍。ASP.NET MVC ScriptBundle 內建依檔案內容計算 SHA256 雜湊碼產生 v... Read More
View ArticleDapper DynamicParameters + ODP.NET 中文亂碼問題解密
前幾天分享我踩到 Dapper DynamicParameters + ODP.NET NVarchar2 產生中文亂碼的坑,有趣的是問題只發生在使用 DynamicParameters 傳值,若改用匿名型別則沒問題。推測是二者處理參數對映時邏輯有別,因時程壓力先找到 Workaround 避開問題... Read More
View ArticleVisual Studio 技巧 - 深入第三方程式庫逐行偵錯
面對刁鑽的 .NET 程式問題,開 Visual Studio 用 F5 Line-By-Line 逐行偵錯是最犀利的破解手段,出錯之前先設定中斷點,按 F10、F11 一步步逼近爆炸中心,配合逐一檢查各變數是否符合預期,通常很快真相就能水落石出。但如果爆炸點在第三方程式庫呢? 如果第三方程式庫為開... Read More
View Article沒有原始碼也能改程式? .NET 除錯神器 - dnSpy
上篇文章介紹了 Visual Studio 的兩項祕密武器 - Source Link 及 Decompile Source Code 功能,能幫助我們針對開源 NuGet 程式庫,甚至對沒有源碼的第三方程式庫逐行偵錯。今天再補充一件無源碼偵錯的神兵利器 - dnSpy。 在 Visual Stud... Read More
View ArticleIIS Reverse Proxy 批次化部署
我有個需要中介伺服器轉接 WebAPI 請求的情境,ApWeb 主機與 ApiWeb 主機間網路不互通,故需要在中間網段架設 Proxy 串接,之前玩過 IIS ARR ,打算找台 IIS 設成 Reverse Proxy 負責轉送 ApWeb 主機發出的 WebAPI 請求。ARR 之前已設過幾次... Read More
View ArticleJson.NET 範例 - 列舉 JSON 各階層屬性
即便後來出現眾多標榜速度的 .NET JSON 程式庫,連 .NET Team 也推出自己的版本 System.Text.Json,強調效能翻倍記憶體更省,但 Json.NET 仍是我心中現階段處理 JSON 的不二選擇。 今天遇到一個較少見的需求,有一個 JSON 結構如下: { "... Read More
View Article.NET 冷知識 - 命名空間 global 關鍵字
同事報案,遇到一宗罕見的 .NET Namespace 命名衝突問題,我用以下專案結構模擬案發現場: 專案 Darkthread.Mobile 參照了 Utility 與 Darkthread.Utility 兩個 Class Library 專案。 Utility 專案有個 Uitlity.Re... Read More
View ArticleCoding4Fun - 小三數學題
在同事的 LINE 群組看到這個據說是小三的趣味數學題(是國小三年級啦,有人是衝著狐狸精才點進來看的嗎?)。 請在下列方格內填入 1-9 的數字以滿足等式: 應該可以用相乘、相加不可超過百位數的限制先過濾掉一些組合再嘗試排列求解,BUT... 小孩子才用紙筆,我偏要用 Coding 早上晨跑腦袋閒... Read More
View Article雜記 - LINQ 邏輯執行時機
分享我前幾天犯下的 LINQ 低級錯誤。 程式需求是從外界拿到一個型別為 Dictionary<string, string> 的 IP 對應表,我想跑迴圈檢查其中 IP 地址字串是否都合法,而專案裡剛好有個 ParseIp() 函式是用 IPAddress.TryParse() 解析傳... Read More
View Article能抓耗子的就是好貓?閒談程式碼 Anti-Pattern
先懺悔一下好了。前篇討論 LINQ 邏輯執行時機的文章不小心示範了「好寫好用但不該推廣的技巧,」但未加註「叔叔有練過,小朋友不要學」或「叔叔在寫 Side Project,不會害到人」警語,恐有誤導之嫌。撰文前其實曾閃過「是否不妥」的念頭,但想想覺得還好便沒放心上。貼文後讀者 Shu Huan Hu... Read More
View Article【茶包射手日記】.NET 排程導致 KERNELBASE.DLL 0xe0434352 錯誤
同事報案,某個排程執行有錯,錯誤訊息如下。 失敗的應用程式名稱: AppCrash.exe,版本: 1.0.0.0,時間戳記: 0x84a8515b 失敗的模組名稱: KERNELBASE.dll,版本: 10.0.18362.535,時間戳記: 0x5bd9df62 例外狀況代碼: 0xe0434... Read More
View Article【茶包射手日記】VS2019 無法執行單元測試
在 VS2019 (版本 16.3.9) 開了新的單元測試專案,在 Test Explorer 可以看到測試方法,但測試無法執行。按下測試鈕後,測試無聲無息結束,執行測試數為 0,也沒傳回錯誤。同一個 Solution 有另一個 .NET Core 寫的 MSTest 單元測試 則一切正常測試。 O... Read More
View Article讓 ASP.NET Core 也能改完 cshtml 立即看結果
這是改寫 ASP.NET Core 後的一大困擾,ASP.NET Core 預設會將 .cshtml 編譯成 YourApp.Views.dll,不再像以前可以直接修改 Views 資料夾下的 .cshtml,重新整理瀏覽器就看修改後的結果。必須停止偵錯,重新編譯執行才會更新。 這項調整讓我的前端程... Read More
View Article.NET 組件版號無法設成 1.0.* 自動跳號
在 Visual Studio 2019 想將 .NET Framework 專案設定版號自動跳號時卡住。 AssemblyInfo.cs [assembly: AssemblyVersion()] 上方的註解明明還提示可以寫成 1.0.* 讓系統自動跳號產生第三及第四段的 Build 及 Rev... Read More
View Article