dotnet.exe五大天王new, restore, build, run, publish命令與watch外傳

dotnet.exe五大天王new, restore, build, run, publish命令與watch外傳

在 .NET Core SDK 裡最重要的莫過於 dotnet.exe 命令,它提供一切 .NET Core 運行所需的基礎環境。

dotnet [command] [arguments] [--version] [--info] [-d|--diagnostics] [-v|--verbose]
dotnet [-h|--help]

dotnet 是進入點, dotnet 之後的 [command] 指定所要執行的命令,例如,dotnet build。也可以指定相容 .NET Core 的 DLL 來執行應用程式。

C#-寫一個 Retry 機制程式碼

C#-寫一個 Retry 機制程式碼

平常,Web 比較多人問關於「時間」的問題是「排程」,在課程被問到「Retry」機制,想想,真的托開發微信API的福,我還真的寫過那麼一小段 Retry 機制的程式碼。完整程式碼沒幾行,就說點小故事,拉點畫面行數吧。

當時我們與微信的測試主機是放在 Azure 東亞(香港)機房,不過因為大陸特別的網路關係,每每從下班之後就變得不穩定,我們某個 API 需要收到對方很明確的回應(成功-失敗)訊息才能往下進行。但好死不死,大陸在下班至午夜的國際網路相當不穩定,以至於我們的 API 常常在下班|半夜被搞死,那段時間,半夜看著Slack的Log偵錯,更是家常便飯。找了好久,才確定那支 API 不是問題點。但問題點來了,對方不知是有意或無意 loss 非內陸的請求,我們知道,把正式機放到 China Azure 就能解決特別的網路問題(後來我們正式機放進去了,還是一堆雷 >__< )。有無更好的解法?想了很久,我決定寫一個 Retry 機制。

Microsoft Build 2017之.NET開發者課程匯總小筆記

Microsoft Build 2017之.NET開發者課程匯總小筆記

Build 2017 From:網路

Microsoft Build 2017 已經落幕,但開發者的重點才要開始,數百堂的技術分享,要如何吸收。還好,Scott Hanselman 幫我整理好了 BUILD 2017 Conference Rollup for .NET Developers 。目前我只看了前二個,簡單做了點小筆記。如果你對 .NET Standard 2.0 / .NET Core 2.0 / ASP.NET Core 2.0 興趣,最少建議花點時間把這兩篇看完。

如何成為Microsoft Docs繁體中文貢獻者

如何成為Microsoft Docs繁體中文貢獻者

MSDN Library 機器翻譯

你是否有過邊看 MSDN Library 文件,不時浮現一個「x」字,心想:「這是在寫什麼鬼?」(台語)的疑問。

.NET 開發人員,你一定讀過 MSDN Library,早些年,MSDN Library 可說是 .NET 開發人員最好的朋友。但近年來,大量的機器翻譯,讓 MSDN Library 品質直線下降。其實,各位所提交的建議,原有一群義工人士,是"真"人工審核。後來不為何,義工人士不斷消失。小弟有幸加入這個消失中的義工團,就我而言,審核分專業和非專業,我不可能專精整個 MSDN Library 技術,在審核非專業內容時需要大量的時間。由於下班後時間有限,只能慢慢放低義工時間,最後,好像能瞭解,機器人造成大量的品質不良,要靠少數幾個人來改善是有難度的。

Micosoft Docs的Github開放開源

目前微軟新版文件庫叫 Microsoft Docs,這一個以開源為導向的文件庫,所有文件內容都開源開放在 Github 上,目前繁體中文化正在火熱進行中(但目前還有很大比例,你點擊後還是看到英文內容),既然開源開放,那麼只要你有心,人人都能成為Microsoft Docs繁體中文貢獻者。目前有二種途徑可以參與:

VSTS Build CI建置Visual Studio 2017 C# 7專案失敗

VSTS Build CI建置Visual Studio 2017 C# 7專案失敗

早上簽入一專案,VSTS CI Build沒幾秒立即出現紅燈:

此專案為類別庫專案,差異點是之前是用 Visual Studio 2015 開發,目前改用 Visual Studio 2017 並重構 C# 6 語法改使用一些 C# 7 out variables 語法。就簽出來使用 Visual Studio 2017 開啟專案狀態來看,Visual Studio 2017 並無修改任何專案內容,在使用 C# 7 out variables 也能正常編譯出 dll 並讓其他專案參考使用。

直覺反應:VSTS 不支援 C# 7 編譯?不會吧!

ASP.NET Core-Tag Helpers無IntelliSense效果

ASP.NET Core-Tag Helpers無IntelliSense效果

在 ASP.NET Core 的 Views (Razor) 提供了一個新的 Tag Helpers,Tag Helpers 有別於 ASP.NET MVC 的 Html Helpers。在 Visual Studio 2017 可以新增「ASP.NET Core Web Application (.NET Core)」或「ASP.NET Core Web Application (.NET Framework)」專案:

  1. 選擇 ASP.NET Core 1.1
  2. 選擇 Web Application

我們開啟 Views/About.cshtml 貼上以下程式碼:

<form asp-controller="Movies" asp-action="Index" method="get">
    <p>
        Title: <input type="text" name="search" />
        <input type="submit" value="Filter" />
    </p>
</form>
tag helper render html

可以看到 asp-* 的 Tag Helpers 會被解析為正常的 HTML 內容。但如果是手刻程式嗎呢?

input asp- tag helper
edit asp- tag helper

可以看到,不論是直接輸入 asp- 或修改舊的程式碼,Visual Studio 2017 不會有任何 IntelliSense 提示。這...

安裝VS2017後造成SSMS 2016 Components錯誤無法啟動暫時解決方案

安裝VS2017後造成SSMS 2016 Components錯誤無法啟動暫時解決方案

SSMS 2016 啟動 Error Message

如上圖,同事安裝 VS2017 之後,SSMS 2016 無法啟動,啟動會出現:Cannot find one or more components. Please reinstall the application.

重新 re-install SSMS 2016 16.5.3 數次,試過這篇這篇的做法,也都無效。

Visual Studio 2017資料庫專案語法高亮失效暫時解決方案

Visual Studio 2017資料庫專案語法高亮失效暫時解決方案

團隊許多專案,在資料庫部分都透過資料庫專案進行管理與發行。但在安裝 Visual Studio 2017 RTM 之後會發現,資料庫專案的語法高亮(Syntax Highlighting)失效,如下圖:

T-SQL Syntax Highlighting not work

在微軟的 Developer Community 找到一個討論串,應該是 bug 無誤了。

其中 Christian Gunderman 提到some language services lose colorization,而且災情似乎只在non-English會出現,看起來要暫時解除此 bug 不是難事。

在非Windows 10(1607)純cmd.exe執行Linux Bash常用指令(ssh, vim, cat, grep, ls...)

在非Windows 10(1607)純cmd.exe執行Linux Bash常用指令(ssh, vim, cat, grep, ls...)

之前有朋友在 fb 說他好高興,因為他的 Windows 可以直接下 ssh 指令,原本以為是如何啟用WINDOWS 10(1607)中的UBUNTU的BASH的好結果。結果是那台電腦安裝了 OpenSSL

在非Windows 10(1607)要執行Linux Bash指令是挺麻煩的。

舉個實際例子:我今天開發 Xamarin app 要建置 iOS app,Visual Studio 突然連不上 MAC 主機,我想用 ssh 去確認 MAC 主機連線是否正常?第一件事就是 ssh 是 Linux 的指令,為了執行 ssh 指令你可以安裝 OpenSSL,哪天,你想用神器 vim 就裝個 Windows 版的 gvim80.exe,需要一個Linux指令裝一套?有沒有一個比較 Total Solution呢?

其實有,而且如果剛好你是位程式開發人員,那麼很有機會這個解決方案早已經在你電腦裡了。今天來分享這個小技巧給各位。

製作離線Visual Studio 2017安裝檔與新VS Installer初體驗

製作離線Visual Studio 2017安裝檔與新VS Installer初體驗

Hello Visual Studio 2017

Visual Studio 2017 經過一年多的 Preview → RC,從目前官方 Visual Studio 2017 Launch Event 的消息來看,2017/3/7 會發行 Viusal Studio 2017 RTM 正式版,其中套件元件化是其中一個很棒的特色,也就是說,如果你的開發工作單純,Visual Studio 2017 的安裝是可能非常輕量化,各種元件之間相依性大減,寫 Web 裝 Web 元件、寫 .NET Core 裝 .NET Core 元件、寫 Azure 裝 Azure 元件、寫 Xamarin 裝 Xamarin 元件,不寫就移除元件,要寫再裝,一整個熱插拔的手感。

Visual Studio 2017 VS Installer 是另一個特色,VS Installer 改進了過去了 Visual Studio 的安裝體驗,新增/移除元件如上所說,另一個特色是Visual Studio 2017 更新或升級,例如,你現在安裝 Visual Studio 2017 RC 版,未來 RTM 推出時不需重新安裝,直接透過 VS Installer 進行更新升級即可。

說真的,從接觸 .NET 使用 Visual Studio 開始到現在,不知道為了 Visual Studio 重灌多少次電腦,光這二個特色我就感動到哭了。

消滅浪費的Visual Studio - ASP.NET MVC與API專案範本

消滅浪費的Visual Studio - ASP.NET MVC與API專案範本

Restart Visual Studio Message

Visual Studio 2015 Update 3 的 Web 專案範本有個問題(更正確的說,是NuGet套件造成)。如果你新增一個 Web 應用程式然後更新所有 NuGet 套件,更新完成後會看到 "Microsoft.Net.Compilers.1.0.0 failed to uninstall. Restart Visual Studio to finish the process." 的提示訊息。

新增專案的兩種浪費

自從接觸到Agile/Scrum之後,有個東西會特別注意,那就是浪費

上述的情況最少有兩種浪費:

  1. 重覆更新NuGet套件
  2. 重啟Visual Studio

由於經常需要寫寫測試程式或範例,套件 30 秒重開 30 秒就這樣不見了,這兩件浪費的事有時一天會發生好幾次,尤其是在寫文章或備課期間更是明顯

有浪費不消滅,說不過去。

如何在 Windows(非IIS) 製作 SHA2(SHA256) 的 .csr 憑證簽章檔案

如何在 Windows(非IIS) 製作 SHA2(SHA256) 的 .csr 憑證簽章檔案

今天在申請 SSL 憑證被單位告知,使用 IIS 產出的 CSR 採用的 SHA1 演算法已被破解(就找到的新聞來看,是被認為不安全,各大公司有計畫性的淘汰 SHA1,例如:SSL 和程式碼簽章憑證的 SHA-1 雜湊演算法移轉 - 以 SHA-2 憑證取代 SHA-1 憑證HTTPS網站被Chrome打臉?),需改用 SHA2(SHA256) 重新製作,但找了半天也沒找到 IIS 在建立憑證簽章請求的 GUI 中可以選擇 SHA2 演算法,後來才知道,使用 IIS GUI 來產生的 .csr 憑證檔案預設都是使用 SHA1 演算法。那麼怎麼辦呢?

還好小弟自己每年要為 kkbruce.tw 申請與安裝 SSL,剛好略懂 SSL 的申請與安裝,不然如果直覺下關鍵字「iis sha2 csr」(我還是有下啦),那些方法看完頭都昏了。

還在徒手揮汗寫For測效能,閃開讓BenchmarkDotNet來

還在徒手揮汗寫For測效能,閃開讓BenchmarkDotNet來

上集使用反射執行方法的7種方式我們談到寫法不同,效果不同這件事,也說到,通常我們測試程式效能會很習慣的採用 Stopwatch 模式(Stopwatch Pattern)來進行程式執行效率的比較。

Stopwatch sw = new Stopwatch();
sw.Start();
// stuff
sw.Stop();

我們把前面的 7 Ways 程式碼用 for 跑 20000 次計算時間,可以得到以下結果:

Way1 Time: 40 ms
Way2 Time: 40 ms
Way3 Time: 76 ms
Way4 Time: 67 ms
Way5 Time: 148 ms
Way6 Time: 4233 ms
Way7 Time: 2054 ms
  

但這樣對嗎?在談效率時,其實有二種意義:時間空間(文言文:時間複雜度空間複雜度),我不是來教書的,雖然 Stopwatch 寫起來不複雜,但僅能看到時間單一面向,好像只要快就是好,怪怪的。

那有無更好的選擇?

Reflection-使用反射執行方法的7種方式

Reflection-使用反射執行方法的7種方式

最近因為專案需求,努力寫著反射(Reflection)程式,還好哥早在2011年就打過底,但大型實務應用開發之後在 fb 上發表些小心得:

  • 取得物件 System.Type 後基本上就無敵了。
  • 你能做的、你不能做的,Reflection 都能做。白話:一些簡單的 private 之類限制對 Reflection 無效。
  • 製作沒有規範 Assembly 的 Reflection 解析執行程式需要:細心、耐心與草x馬的愛心。(突然覺得那些反編譯器好偉大)
  • 接上題,規範好 Assembly 介面定義,大家都會很開心
  • 寫法不同,效果不同。純反射 4.1 > dynamic 1.4 < delegate 1.2。delegate 最快。
  • Expression 網路上的資料它也比 dynamic 快,但我的實作不適合驗證,沒取得數值。
  • ps. 美國微軟工程師的 Bruce 說,dynamic 能不用就不用。我自己的實作心得:dynamic 沒有比 delegate 快,又有些缺點,我也不建議使用。

後來,實在手癢的受不了,把底層用 Expression 改寫,得到以下結果:

  • v1, reflection - 純反射,最慢;
  • v2, delegate - 比純反射快 4 倍(自己測);
  • v3, expression - 與 delegate 差不多;

速度與可讀性而言,目前 delegate 最好。寫法不同,效果不同。

Reflection - Method Invoke 7 Ways

這裡我將手邊知道的「執行方法」的方法做了以下整理,總共有 7 種方向。