Category: .net

透過程式存取 Windows 網路分享的檔案也算常見需求,但存取身分是個問題。之前我慣用的技巧是用有權限的 AD 網域帳號執行排程存取網路分享,但這招要搬進網站或遇到不同網路分享用不同帳號便會破功。最近遇上類似議題,直覺要得回頭靠 WinAPI Impersonation 解決,之前曾寫過通用元件,...

被一個 XML 讀取問題卡住大半天,寫篇筆記留念。 我有個 Coding4Fun 電子書製作工具,將 XHTML 範本檔案內嵌成資源(Embedded Resource),再用 GetEmbResString() 讀取範本 XML 交給 XDocument.Parse() 轉成 XML 物件操作: ...

先說說應用情境:我有個外部傳入的結構化資料需要套表產生 Word 表格,使用者預先做好範本 Word 檔,調好表格大小、文字對齊、字型顏色樣式... 等等: 理想目標是傳入包含編號、分類、廠牌型號、數量等屬性的物件陣列轉成 Word 表格。 using System.Collections.Gen...

有個使用 SSH.NET 連線 SFTP 交換檔案的排程,一登入便冒出錯誤 - Channel was closed 並立刻斷線,故意亂給帳號密碼則會出現 Permission denied (password),初步研判帳號密碼沒問題,錯誤另有原因。 爬文查不到明確方向,大致指向連線被伺服器切斷方...

這篇聊聊如何防止測試環境專用的特殊程式邏輯在正式環境被誤用? 實務上測試或開發環境與實際環境常存在難以克服的差異,為方便測試,有時我們需要加入一些測試專用的程式碼,例如:資料轉換、省略權限檢查... 等。 最不花腦筋的做法是直接把測試邏輯加進程式碼,上線前再記得拿掉。但老鳥都知道這樣一定有風險,一旦...

如果你很早開始寫 .NET Core 程式,有個節省寶貴 SSD 空間的小訣竅 - 移除不必要的 .NET Core SDK。 .NET Core/.NET 5 的 Runtime 或 SDK 採 Side-by-Side 安裝,新舊版會並存,新版會換掉 C:\Program Files\dotne...

由前陣子 lock + 共用靜態物件 vs 每次新建物件的效能案例,當新建物件成本不高且方法非 Thread-Safe 時,共用靜態物件加 lock 還不如每次新建物件有效率,該如何決策顯而易見。但如果新建物件的成本很高呢?若建構物件需要耗用大量 CPU 或記憶體,甚至得爭奪有限資源(固定數量的 S...

專案裡有個需求,希望當使用者輸入字串為日期或日期時間時自動轉成 DateTime 型別,我想到用 DateTime.TryParse 來做(註:更嚴謹的做法是改用 DateTime.TryParseExact 正向表列所有支援格式,但我選擇借用 TryParse 內建的彈性較省事),目標是要能支援多...

.NET 5 是微軟最新推出的程式開發平台,要在個人電腦上執行用 .NET 5 開發的程式,先安裝 .NET 5 所需要的執行環境(術語叫 SDK 或 Runtime)通常會比較方便,以下將介紹如何在 Windows 安裝 .NET 5 執行環境。 .NET 5 可支援的作業系統如下,基本上除非你還...

前幾天聊到我喜歡將小工具程式編譯成單一檔案,免安裝,不必解壓縮 DLL,整個工具就一個 EXE 檔,放到桌面上點兩下就能用,這是最棒的部署方式! 文章裡提到 .NET 5 內建嵌入參照 DLL 功能,且不像 .NET Core 3.1 得將內嵌參照 DLL 寫成實體檔暫存,實現真正的單檔執行。這篇文...

前天提到 JScript.NET 跑 Eval() 在多緒執行出錯崩潰的案例,問題根源在當初覺得反覆編譯 JScript 建立組件並建立物件個體會拖累效能,故寫成只建一個靜態物件共用,但因 eval() 並非 Thread-Safe 方法(指被多條執行緒同時執行也不會有問題),於是線上大量使用下有微...

最近用 C# 寫了幾支小工具要交給 End-User 桌面執行,為簡化部署程序,將參照 DLL 併入整成單一 EXE 檔是我愛用的做法。 免安裝,不必解壓一堆 EXE、DLL 存到特定資料夾,整個工具就一個 EXE 檔,放到桌面上點兩下便能用,很棒吧! .NET Core 3 支援編譯封裝成單一執行...

今天解掉一個糾纏十餘年的老茶包,有治好數十年痼疾的痛快,特 PO 文紀念。 某個古老系統有個進階客製需求,允許設計者在定義作業流程時可以撰寫自訂規則,用預先定義好的資料變數符號(例如:$FieldA、$Now...)配合大於、小於、AND、OR 寫出複雜的判斷條件式,還要能支援括號優先順序。當年的我...

前幾天的浮點數討論再次突顯 float、double 計算結果常存在微小誤差的特性,甚至會出現以下狀況: float a = 1/3,a 值顯示為 0.3333333,但 a 不等於 0.3333333f,a 也不等於 float.Parse(a.ToString())! 因此,在很需要精準度的場合...

讀者 Lina 問了一個有趣問題: 為什麼 float 計算 193.25*4/3*3 等於 773 跟手算結果相同(除 3 跟乘 3 可約分),用 decimal 計算 193.25*4/3*3 卻是 773.00000000000000000000000001 反而誤差更大? 依據黑大名言「...

前幾天分享的暫時性故障重試利器 - Polly,起源於我要處理一個 Deadlock 失敗自動重試的案例。案件本身有點玄疑,發生在一段 WHERE、JOIN 條件頗複雜的純查詢上(對! 只有 SELECT,不涉及 UPDATE、DELETE),在線上環境尖峰時間偶爾發生 "交易 (處理序識...