[小菜一碟] 利用 SQL Server 的 CTE(Common Table Expression)遞迴取得族譜中某人的所有子孫

樹狀的資料結構在日常的程式設計當中挺常見的,舉凡像是留言板人事組織族譜、…等,都用得上,但當我們把樹狀結構的資料存進 SQL Server 之後想要撈出來,除了用跑迴圈之外大概就是用遞迴了,迴圈的寫法就不多介紹,本篇文章要來跟大家分享遞迴的寫法。

...繼續閱讀 »

[創意料理] 用 IL Code 來做一個簡易版本的 FastMember

最近 IL Code 寫得比較多,主要是在練習,目的是希望自己將來遇到效能議題的時候,還有招數可以施展,剛開始練習寫 IL Code 的時候,是先從存取一個 instance 的公開或私有的屬性及欄位開始,這讓我想到一個套件 - FastMember,作者已經至少有 2 年沒有更新了,既然會一點 IL Code,那我能不能弄一套屬於自己的 Chef.FastMember 呢?

...繼續閱讀 »

[料理佳餚] 在執行時期(Runtime)憑空捏造一個型別(Type)

先前的文章有提到過「在執行時期憑空捏造一個組件」這件事,我是用在自己打造的 Library 之中,而做這件事的最主要目的是在執行時期產生一個類別,用來產生使用端類別的替身,或是用來做一些特殊的識別,我們就來看一下,要在執行時期產生一個類別,需要做哪些事情?

...繼續閱讀 »

[料理佳餚] 用 C# 的 System.Reflection.Emit 撰寫 IL Code 將值指派給私有欄位(Private Field)

程式寫多了,我們多多少少會開發一些 Library 來輔助我們讓程式寫起來更方便一些,這些 Library 通常都獨立於專案之外,除了使用上的彈性之外,還有一個我們會關注的大概就是效能了,既然提到了效能,我們腦海中閃過的解決方案應該會有「撰寫 IL Code」這個選項,IL Code 雖然可讀性極差,但是如果我們有能力可以讀得懂,甚至使用 IL Code 撰寫程式的話,對我們在程式執行狀況的掌握,絕對有正向的提昇。

我就用 IL Code 撰寫一段將值指派給私有欄位的程式來當個起頭,之後如果還有遇到 IL Code 可以發揮的地方,我也會儘量整理成文章分享給大家。

...繼續閱讀 »

[小菜一碟] 為我們在 ASP.NET Core 的靜態檔案加上 Cache-Control

當我們建立一個 ASP.NET Core Web 應用程式專案的時候,預設在 Startup.cs 中就會呼叫 UseStaticFiles() 使用 StaticFileMiddleware,讓專案中的靜態檔案可以透過 HTTP 被存取到,現在我想要將這些靜態檔案 Cache 在 CDN 上,我需要在 Response Headers 裡面加上 Cache-Control: public, max-age=n,我們來看要怎麼做?

...繼續閱讀 »

[料理佳餚] 實作 IFeatureDefinitionProvider 從外部的服務載入 ASP.NET Core Feature Flags(Feature Toggle)的設定

上一篇提到我們可以把 ASP.NET Core Feature Flags 的設定,儲存在 Azure App Configuration(應用程式組態)裡面,現在再進階一點,我們可以實作 IFeatureDefinitionProvider 建立一個 Feature Definition Provider,讓 Feature Flags 的設定可以儲存在我們想要的地方。

...繼續閱讀 »

[廚餘回收] Visual Studio 2019 一直出現「warning : Your project does not specify a TypeScriptToolsVersion.」警告

Visual Studio 2019 在建置 ASP.NET Core 專案時,一直出現下面的警告訊息,由於我的專案沒有使用 TypeScript,看到這個警告訊息也是覺得挺詭異的,一直想要把它弄掉。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\TypeScript\Microsoft.TypeScript.targets(72,5): warning : Your project does not specify a TypeScriptToolsVersion. The latest available TypeScript compiler will be used (3.9). To remove this warning, set TypeScriptToolsVersion to a specific version or "Latest" to always select the latest compiler.

...繼續閱讀 »