[UnitTest] 讓 TFS 套用 App.config Transformation 切換連線字串

https://dotblogs.com.tw/yc421206/archive/2014/07/28/146082.aspx 根據上篇,可輕易地在專案建立出不同環境的組態設定,但是 TFS 上的 Build 沒有正常的切換環境,測試專案的連線字串沒有根據我期望的切換,不像 Web 那樣,原來還需要一些設定,以下分享我成功的方法。

...繼續閱讀 »

[TFS 2017] 在不同的 SQL Instance,TFS 2015 升級到 TFS 2017

Team Foundation Server 2017 出來沒多久後,我就按下升級了,不過升級的過程當中很快就卡住了, SQL Server 最低要 2014,我的 SQL Server 只有 2012,就代表我得先升級 SQL Server
由於那台 SQL Server 是 Production ,不能隨便亂動(升級),為了要能夠升級然後又不想要每次都處理資料庫版本相依的問題,我把原本分散式的架構,換成集中式,並把舊的資料庫轉移到新的資料庫

Franma得知後在第一時間內就撥電話給予建議(感覺超麻煩),我在轉移資料庫的過程當中也嘗試了幾種失敗做法,現在,分享我成功的作法,獻給Franma,也獻給跟我碰到同困境的夥伴

 

...繼續閱讀 »

[ASP.NET] 解決網站的第一次請求很慢 - PreComplier

根據預設,在使用者首次要求資源時 (例如要求網站的頁面),會動態編譯 ASP.NET Web 網頁和程式碼檔。在頁面與程式碼檔案初次編譯之後,就會快取編譯過的資源。因此,後續對相同頁面的要求就會非常有效率。 出自:https://msdn.microsoft.com/zh-tw/library/bb398860(v=vs.110).aspx

根據預設,Web 應用程式專案中的程式碼檔可藉由使用 Microsoft Build Engine (MSBuild) 而先行編譯成單一組件。 ASP.NET Web 網頁 (.aspx)、使用者控制項 (.ascx) 及 MVC Razor 檢視 (.cshtml and .vbhtml) 則會由 ASP.NET 編譯器在伺服器上進行動態編譯。 您還可以選擇先行編譯網頁、使用者控制項及 Razor 檢視。 出自:https://msdn.microsoft.com/zh-tw/library/aa983464(v=vs.110).aspx

...繼續閱讀 »

[IIS 8] 解決網站的第一次請求很慢 - 設定 Application Initialization (Preload)

有經驗的 .NET 開發人員大都會知道第一次瀏覽網站的時候都會很慢(第一個人是倒楣鬼),因為 ApplicationPool 必須要有請求才會活起來

為了閃掉這個問題,可透過腳本定期瀏覽不要讓人家發現這個問題

在 IIS 8 之後 (IIS 7 要另外處理),就可以直接設定 Application Initialization (Preload),讓 IIS 自己當第一個人瀏覽網站,以下分享我的作法

 

...繼續閱讀 »

[ASP.NET Identity] Identity 起手式

會員管理的演進過程有很長的一段時間,從 ASP.NET 2.0 開始的 Membership 到現在的 ASP.NET 4.5 的 Identity,一代比一代好,每一代都有他存在的價值,沒有絕對的優點

現代,若是要開發一個安全性高(雙因子驗證),整合外部帳號(Google、Facebook) ,ASP.NET Identity 就成為我的首選

另外它以 OWIN 為基礎,可以在所有 .NET Framework中使用,包含 ASP.NET MVC、 Web Forms、Web Pages、Web API,與SignalR等類型的應用程式

...繼續閱讀 »

[AutoMapper] AutoMapper 5.0.2 的新寫法

在 4.2 的時候,CreateMap 方法只是被標記過時

到了 5.0.2 的時候,這些過時的方法,已經被拔掉,改由 MapperConfiguration 取代,一旦升級到 5.0.2 就勢必要面臨改寫程式,也獲得到超高效能
https://lostechies.com/jimmybogard/2016/06/24/automapper-5-0-speed-increases/

...繼續閱讀 »

[Elmah] 保護 Elmah 的連線字串

從大神 Kevin 那邊知道 Arebis.Web.Mvc.ElmahDashboard 這個 Dash Board套件,它比 Elmah.axd 更加的友善,使用後讓 Log Viewer、Search 的友善度提升,二話不說立馬納入專案內;有在使用 Elmah + Sql Server 的夥伴,可以試著使用看看
http://getglimpse.com/
http://kevintsengtw.blogspot.tw/2016/05/aspnet-mvc-elmah-dashboard-elmah-sql.html

這裡將分享保護 Elmah Connect String 的使用經驗,不會提到安裝套件步驟

...繼續閱讀 »

[Glimpse] 使用 Glimpse 診斷網站應用程式

開發網站應用程式的時候,可以搭配一些診斷工具,方便開發人員除錯。

Glimpse (http://getglimpse.com/) 是一款內嵌至應用程式的診斷套件,不需要修改程式碼就能擁有診斷功能,強化瀏覽器 (F12,開發者模式) 辦不到的事情,比如:Sql Query。

安全性的部分,Glimpse 預設不允許遠端存取,只能用在開發環境,資訊洩漏的問題也幫我們想好了,若要開啟,請做好安全性設定

...繼續閱讀 »

[Entity Framework 6] Code First - PK Column set Non-Clustered

預設,SQL Server 會幫我們把 PK 設為 Clustered,當 PK 是 GUID type(uniqueIdentifier) 時,有一些注意事項

  1. 使用具有順序性的 GUID,避免索引破碎;我習慣自己產生,不使用 SQL 提供的Store Procedure 的 NEWSEQUENCEID 和 NEWID
  2. 設為 Non-Cluster

原本以為用 Code First 要把 PK 設為 Non-Cluster 很簡單,沒想到還是卡關

如果你跟我一樣,使用 Code First,PK 是 GUID,請看我的解法...

...繼續閱讀 »

[Unit Test] 測試程式中的比對物件

結果與期望比對,是測試程式碼中最重要的一個步驟,就是用它來取代人眼比對,有關物件比對 91哥的文章有非常詳細的介紹:

https://dotblogs.com.tw/hatelove/2014/06/06/how-to-assert-two-collection-equal

https://dotblogs.com.tw/hatelove/2016/03/28/compare-object-equality-with-expected-objects

當測試程式碼用的是複雜型別,會比對型別中的屬性狀態(值),用它來決定是否通過驗證,最直接的方式就是跑迴圈一個一個比,這樣做不是很聰明,也不夠快,太費力

我會使用以下物件來完成我的工作

  1. FluentAssertions
  2. SpecFlow

在這裡我分享我常用的比對方式...

...繼續閱讀 »