顯示具有 .NET Framework 標籤的文章。 顯示所有文章
顯示具有 .NET Framework 標籤的文章。 顯示所有文章

使用PowerShell動態建立C#物件進行FTPS檔案上傳

使用PowerShell動態建立C#物件進行FTPS檔案上傳

早先在 PowerShell 以 Posh-SSH 模組開發了 SFTP 站台的檔案上傳腳本。需求又新增 FTPS 站台的檔案上傳支援。找了一下 PowerShell Gallery 比較多人使用的是 PSFTP 模組,測試了一下,發現大部分都是支援 FTP 與 SFTP,沒有直接支援 FTPS 的。沒有,那我們就直接在 PowerShell 裡刻一個吧。

使用PowerShell判斷主機安裝的.NET Framework版本

使用PowerShell判斷主機安裝的.NET Framework版本

目前專案維持舊專案 .NET Framework 與新專案 .NET Core 的關係,而 .NET Framework 專案從 4.5.x、4.6.x、4.7.x、4.8 都有,而伺服器需要安裝至對應版本 .NET Framework,例如,專案使用 .NET Framework 4.7.2,伺服器只安裝 4.7.1 則不行。在維護伺服器時需要確認目前已經安裝的 .NET Framework 版本,微軟官方:「判斷安裝的 .NET Framework 版本」是用 C# 方式去判斷。這在伺服器就是不方便,又不是開發機,我按文件邏輯改為 PowerShell 版本,PowerShell 方法在任何主機都能快速判斷已安裝 .NET Framework 4.5.x ~ 4.8 版本

如何依.NET應用程式建置組態產生對應的Prefix前綴路由

如何依.NET應用程式建置組態產生對應的Prefix前綴路由

在將一個 ASP.NET Web API 應用程式進行容器化(Containerization)發現一個問題,原先的 Web API 部署至 IIS 應用程式之下,我們會區分開發區(Develop)、測試區(Staging)、正式區(Production),而原始的請求因為 IIS 應用程式的關係,路由都會被加上應用程式的前綴(Route Prefix),例如:

  • Org:/api/value
  • Dev:/develop/api/value
  • Stg:/staging/api/value
  • Prd:/production/api/value

進行ASP.NET容器化-以ASP.NET MVC/Web API為例

進行ASP.NET容器化-以ASP.NET MVC/Web API為例

要將 ASP.NET MVC / ASP.NET Web API 轉移至 Docker Container 中運行,看似麻煩,但其實非常簡單。以下討論不使用工具與使用 Visual Studio for Docker 工具來達成轉移的工作。

.NET開發者,你應該養成用空白範本寫正式專案

.NET開發者,你應該養成用空白範本寫正式專案

這是一篇有感而發的短文。

最近又在做效能調教的工作,在單一個專案內我移除了近30個無用的NuGet套件。其實不用問,一眼就能看出,這是一個從預設專案範本開始寫的專案。用專案範本有錯嗎?嗯,沒錯,也有錯。原因,最後在說。我們先來看看之前 twMVC#22分享主題:「一個微信專案從0到000的效能調教」的幾張投影片。

無法載入System.Diagnostics.DiagnosticSource錯誤

無法載入System.Diagnostics.DiagnosticSource錯誤

專案升級套件後,Web、API相繼掛點,出現黃白畫面:

Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

如何成為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繁體中文貢獻者。目前有二種途徑可以參與:

解決.NET Runtime Optimization Service(mscorsvw.exe)造成CPU不斷飆高

解決.NET Runtime Optimization Service(mscorsvw.exe)造成CPU不斷飆高

近期不知道有何原因,公司與家中筆電都會不時出現風扇提高轉速的聲音,本來不太在意,但高轉速有時持續一整天,而且電腦明顯變慢,開啟[工作管理員]查看,非常明顯,有個 .NET Runtime Optimization Service(mscorsvw.exe) 長時間在使用 CPU。

以 requestb.in 解開 HTTP Request 之密

以 requestb.in 解開 HTTP Request 之密

公司有個特別的 D 系統,我們需要透過 ASP.NET Web API 去存取它的 XML Web Service 來提供資源。這個 D 系統本身有個特別的限制,就是存取之前使用者需要先進行頁面 Login,然後才能存取 XML Web Service。Login 頁面很單純,就是一個帳號與密碼的組合,沒有其他特別驗證碼等保護。也就是使用者使用者輸入帳號密碼,而 ASP.NET Web API 透過使用者提供的帳號密碼透過程式方式進行登入,我們開發的 ASP.NET Web API 服務從一開始的 Beta 至 RC,這部分的程式碼都沒什麼問題,直到那令人鬼打牆的關鍵人物(暫稱他苦命的呆伯特好了)出現。

呆伯特一直說無法Login

簡單說明一下,此 ASP.NET Web API 服務主要使用者在美國,美國下班台灣上班的黃金交接點,我們私下請呆伯特(美國)幫忙測試此 ASP.NET Web API 服務的同事,但幾星期以來僅呆伯特都一直反應無法 Login 服務,由日誌看出來,他確實是登入失敗。但所有幫忙測試的人員只有呆伯特會出現此狀況。D 系統我們無任何權限,我們能做的也只是不斷調整 ASP.NET Web API 程式並不斷請呆伯特幫忙 Login 與測試。但每每得到"不行"時,心情都低落到不行(測到呆伯特都生氣了),不過最後得到一條重要資訊,呆伯特的密碼含有數個的特殊符號

我們為加解密演算法補上特殊符號的測試程式碼,先確保特殊符號在加密與解密過程正常。其中小心\"這兩個符號,在C#的字串中,需要使用\\\"進行轉義。

以這條線索測試到最後終於有了曙光。

.NET Framework 4.6新增Unix TimeStamp方法

.NET Framework 4.6新增Unix Time Stamp

skilltree課程

Timestamp(中文稱時戳、時間戳)是經常用於安全保護上的一種機制,例如每天上下班的打卡,就是一種保護勞資雙方的機制,卡打下去的那一刻的時間點是無法被偽造,用計算工時與工資。在網站資訊安全方面,例如近年流行的OAuth認證機制(facebook登入、google登入、github登入、Microsoft account登入…等第三方登入機制)中重要的Token,通常就會帶有Timestamp機制,以驗證Token的時效性。

Unix Time Stamp

TimeStamp很好,但他的格式並不好處理,我們看一下wiki上的範例:

  • Tue 01-01-2009 6:00
  • 2005-10-30 T 10:45 UTC
  • 2007-11-09 T 11:20 UTC
  • Sat Jul 23 02:16:57 2005
  • 12569537329
  • (1969-07-21 T 02:56 UTC) – first footstep on the Moon, "That's one small step for man, one giant leap for mankind"
  • 07:38, 11 December 2012 (UTC)

TimeStamp格式那麼多之外,在多國語系下,你可能還要自行先轉換為UTC (格林威治標準時間)時間。

在上述格式中,我們特別注意到一個12569537329數值,這是什麼東西?這種格式稱Unix Time,它是一種把時間轉換為數值的方式,它以1970-01-01 T 00:00 UTC為基準,每秒加 1 方式計算,如果是在基準點之前,就每秒 -1 方式計算。例如,我們把上述 Unix Time 放到http://www.unixtimestamp.com/進行轉換:

Timestamp Converter

就能還原成特定的時間點。因為數值的特性直覺、簡單、好處理,所以 Unix time 常被拿來做 Timestamp 使用。

AutoMapper升級至4.1.1後出現ProfileName錯誤

AutoMapper升級至4.1.1後專案無法編譯

AutoMapper ProfileName Error

早上升級專案 AutoMapper 套件到最新版(4.1.1)後,發現專案無法通過編譯,查看錯誤訊息,看來是 AutoMapper 4.1.1 的屬性有些改變。

Profile.ProfileName

錯吳訊息

'xxx.ProfileName': cannot override inherited member 'Profile.ProfileName' because it is not marked virtual, abstract, or override

很明顯,新版本改變了 ProfileName 的存取方式,查詢AutoMapper Releases沒查到什麼有用的資訊。

按下F12查詢 Profile 類別的定義:

AutoMapper Profile 定義

ProfileName 屬性僅能 get,再看看建構式,解法很明顯了:

破解System.Web.Helpers 2.0.0.0與3.0.0.0之謎

破解System.Web.Helpers 2.0.0.0與3.0.0.0之謎

Error 2

System.Web.Helpers命名空間是.NET Framework裡一個神秘的組織,它和ASP.NET MVC 3一起推出,知道和用它的人並不多,它暗地裡提供許多便利型的功能(可以參考之前寫的系列文(12345678)。但如上圖所見,它在我VS2015裡的新專案裡就這樣赤裸裸的爆開,開啟著另一個VS2013的專案,怎麼一切安然無事。當下會很直覺的想罵聲-暗,是不是命中帶ㄕㄞˋ,老是碰到這種鬼錯誤。但有幾次VS2015的經驗,我改變心態,耐著性子一路追下去,意外發現System.Web.Helper一件不為人知的故事。

Web API Client Library+Portable Library打造跨平台的Web API服務類別

Web API Client Library與Portable Library

ASP.NET Web API Client Library(HttpClient)讓我們簡單地在.NET用戶端應用程式中與RESTful HTTP Service互動。之前版本的Web API Client Library對於跨平台的支援度不是那麼好,目前Web API Client Library的下一個預覽版已經在這方面進行改良。此預覽版新增了可攜式類別庫(Portable Library)的支援,目前支援.NET Framework 4.5、Windows Store、Windows Phone 8三種應用程式類別。這些支援建構在最近發佈的可攜式HTTPClient和可攜式類別庫支援Json.NET。這樣我們就能建立單一的可攜式類別庫去讓Windows Store App、Windows Phone去呼叫Web API。

建立不同平台的專案

接下來,我們要建立三個專案,一個可攜式類別庫,透過可攜式類別庫使用Web API Client Library來呼叫RESTful HTTP Service,一個.NET Framework 4.5的主控台應用程式,一個Windows Store App,主控台應用程式與Windows Store App會透過可攜式類別庫來進行服務呼叫。

  1. 新增專案 → 可攜式類別庫專案 → 名稱:ContosoClient
  2. 進行可攜式類別庫條件設定。請設定為.NET Framework 4.5、Windows Phone 8、.NET for Windows Store App
    這是因為ASP.NET Web API Client Library不支援 xbox 360、Silverlight和Windows Phone 7.5。以下範例不進行Windows Phone 8示範,不過我們的建立的可攜式類別庫是可以支援Windows Phone 8。
  3. 加入 → 新增專案 → 主控台應用程式 → 名稱:ContosoConsole
  4. 加入 → 新增專案 → Windows市集 → 空白的應用程式(XAML) → 名稱:ContosoStore
    這裡可能會出現要求取得市集開發者授權請求,請依畫面登入取得。
  5. 透過 NuGet 為三個專案加入Microsoft.AspNet.WebApi.Client的參考。NuGet請選擇包括發行前版本
  6. 為ContosoConsole與ContosoStore專案加入對ContosoClient的參考。

Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看

來自TechEd North America 2013的第一手消息

以下資訊均來自 Channel9 目前於北美 TechEd 活動影片,主要記錄 DEV-B314 這一場 Microsoft ASP.NET, Web, and Cloud Tools Preview 的筆記。

Visual Studio 2013 Preview改良部分

以下將 Visual Studio 2013 Preview 相關內容整理如下:

單一對話視窗

Visual Studio 2013 Preview簡化一開始的新增專案的對話視窗,只區兩大類,進入後也只區分為Empty、Web Forms、MVC、Web API、SPA、Facebook、Mobile。

Web Application dialog

測試伺服器

測試伺服器不在局限於IIS Express,也可以設置為外部伺服器。

ASP.NET 測試伺服器設置

Browser Link

當我們修改頁面文字、Layout、CSS等,可快速重整所有已連接至Visual Studio測試頁面的瀏覽器。

快速重整已連接至Visual Studio測試頁面的瀏覽器

認證組態

在新增專案時即可設置認證組態,目前可結合其他外部Microsoft Live Id、Facebook、Google+、twitter等。

認證組態1

認證組態2

集合與泛型集合中Contains方法處理效能測試

Contains方法

Contains()方法在很多地方都可以使用,主要是用來比較指定物件內是否含有指定的項目。例如:String 型別的 Contains()方法就經常拿來搜尋或過濾字串使用。

    Dim YesNo As Boolean = "Bruce很帥XD".Contains("帥")
    Console.WriteLine(If(YesNo, "帥", "不帥"))
    Console.ReadLine()
   

但今天想瞭解在含有大量資料時,集合與泛型集合內的Contains方法的處理速度。

測試原因

想瞭解與測試的原因是因為亂馬客寫了一篇 .NET]產生不重覆的數值(List vs HashSet) 的文章,他測試結果是正確的,不過我認為測試範圍可以加大到集合與泛型集合,所以有了以下測試程式碼與測試結果。程式碼參考亂馬客文章進行修改,主要加入了 Counter 變數,記錄下 while 迴圈的執行次數,這樣比較能瞭解誤差值。

集合與泛型集合 - Contains方法

程式碼主要是要產生不重覆的數值,所以重點其實只在 while 那一行程式碼,這裡我加大數值的量,由 1 ~ 100000 裡取出不重覆的 90000 個數值。因為我們只單存取一個數值,所以 Key/Value 的集合與泛型集合就不在測試程式碼之內。

ASP.NET Web API 心得筆記 (9) 簡介 System.Net.Http.HttpClient 類別

HttpClient 類別介紹

提供基礎類別來傳送 HTTP requests(請求)接收 HTTP responses(回應)從一個 URI 的資源定義。目前 HttpClient 類別為 .NET Framework 4.5 Beta 中 System.Net.Http 命名空間之下,使用方式在未來正式版中可能會有修改,以下所提範例在未來是否能正常運作是未知,但提供的觀念我相信是一樣的。

HttpClient 類別使用說明

HttpClient 類別執行個體做為發送的 HTTP 請求的會話(session),HttpClient 執行個體是應用於該執行個體來執行所有請求的設定的集合。此外,每一個 HttpClient 執行個體將使用自己的連接池(connection pool),以隔離來自其他 HttpClient 執行個體所執行的請求的請求。

使用 HttpClient 類別非同步取得 URI 資源

我們先看一個最簡單的範例,我們開一個【主控台應用程式】:

ASP.NET Web API 心得筆記 (1)

ASP.NET Web API 是一個框架(framework),能讓你在 .NET Framwork 之上架設 HTTP 服務 (HTTP Services)。ASP.NET Web API 是 .NET Framework 上建置 RESTful 應用程式的理想平台。

在 Julie Lerman's 的 How I see Web API 一文中,用了一張圖來簡明說明 Web API:

比較 WCF 與 Web API
圖一:比較 WCF 與 Web API from thedatafarm.com
註:以下內容,會使用 Visual Studio 11 Beta 來實作,因 VS 11 還未有正體中文版,與 VS 11 相關步驟會使用英文。另外,可順便先熟悉 VS 11 開發環境。除簡化的圖示不談,整體開發功能是更上一層樓。

建立 Web API 專案


開啟 VS 11 → Start → New Project → Installed → Templates → Visual Basic → Web → ASP.NET MVC 4 Web Application → 在 Name 輸入 "HelloWebAPI" → OK

選擇 ASP.NET MVC 4 專案
圖二:選擇 ASP.NET MVC 4 專案
在 New ASP.NET MVC 4 Project 裡選擇 Web API 然後點擊 OK。

選擇 Web API 樣版
圖三:選擇 Web API 樣版
這裡有個有趣的地方。
之前,我在接觸 ASP.NET MVC 3 時,有點想去學 Razor 語法,因為大家一直強調 Razor 的好處,也讓我小小心動,不過,每一次接觸這種 v1 東西總是讓我碰壁,在 Visual Studio 2010 + Visual Basic 2010 + MVC 3 + Razor 環境裡,Visual Studio 2010 當的不像話,隨便打個 @html. 就可以當好幾次,後來還是把心思放在 MVC 上就好。但在 Visual Studio 11 裡中,VB中 Web API 只的支援 Razor,資料沒看錯的話,Visual Studio 11中 是 Razor v2。目前還沒有去 View 裡認真玩,簡單打一些 keyword 是沒有之前當掉情況,未來有 VB for Razor 的心得,再寫上來。

加入 Model

Model 是在應用程式中使用物件(object)方式來表現資料。ASP.NET Web API 能自己序列化(serialize) 你的 Model 成為 JSON、XML 或其他資料格式,然後寫入這些已序列化資料到 HTTP 回應訊息 (response message) 的主體 (body) 中。只要用戶端 (client) 能讀取序列化格式,它就能反解析序列化成為物件。許多用戶端都能同時解析 XML 與 JSON。而且,用戶端可以在 HTTP 請求訊息 (request message)的 Accept header 裡直接設定那種格式 (JSON, XML, Other) 是要接受的。

有沒有很心動?我們先加入一個 Products Model。

.NET Framework 垃圾收集(garbage collection)初了解

感謝 91哥提供的兩篇文章,讓我更加了解垃圾收集 (garbage collection,GC),看完感覺,越自動化感覺不到它的存在越是重要


稱之為入門篇,因為他寫的真的很好懂,以下實 C# 轉 VB,再加上自己的一些註解。

Module Module1

    Private Sub GenerationDemo()
        ' 了解 GC 最大為 0, 1, 2 三層
        Console.WriteLine("最大 GC 代: {0} ", GC.MaxGeneration)

        ' Heap 新增一物件
        Dim obj As New GenObj("Generation")

        ' 顯示目前物件在 GC 第幾層
        obj.DisplayGeneration()

        For i As Integer = 1 To GC.MaxGeneration
            ' 進行 GC 收集動作
            GC.Collect()
            ' 因為 obj 沒被回收
            ' 每次會被拉高一層代
            obj.DisplayGeneration()
        Next

        obj = Nothing

        For i As Integer = 0 To GC.MaxGeneration
            ' 強制立即執行層代零至指定層代的記憶體回收。
            GC.Collect(i)
            ' 暫止目前的執行緒,直到處理完成項佇列的執行緒已經清空該佇列為止。
            GC.WaitForPendingFinalizers()
        Next

        Console.WriteLine("Demo Stop.")
    End Sub

    Sub Main()
        GenerationDemo()
        Console.ReadLine()
    End Sub

End Module

Class GenObj
    Private _name As String

    Sub New(name As String)
        name = _name
    End Sub

    ' 回傳目前物件所在 GC 第幾層
    Sub DisplayGeneration()
        Console.WriteLine("我在第 {0} 層", GC.GetGeneration(Me))
    End Sub
End Class

整個過程如同程式流程一樣:
  1. 取得目前 GC 層數
  2. 新增一物件,並顯示此物件目前所在 GC 層數
  3. 進行 GC 回收,因為每次 GC回收 obj物件沒有消失,代表重要性需要提升,加高一層級
  4. 設定 obj 為 Nothing
  5. 執行 GC 回收,GC 發現 obj 為 Nothing,回收此資源

此篇說明比較學術,但可以更細部了解整個 GC 運作,真的是大內高手專欄。

個人心得

我覺的看完第一篇就很有滿足感,就我在 Web Developer 的工作內容上,我們一般只用用 Close 或 Dispose ,很少會去手動碰 GC 的內容。不過,能更深一層的了解 .NET Framework 是有其必要性。

2012 A Best Present "Microsoft MVP Award"

我只是一個平凡人,如果我能,你也能。by KKBruce
首先,我一定要感謝我最愛的家人們,不管什麼時候、什麼事,你們都永遠支持我。再來感謝所有幫助過我的人,因為有你們的表率,讓我有學習的對象,讓我有機會成為一位Microsoft MVP。

2012年最棒的一份新年禮物,那就是我當選2012年 Microsoft MVP

KKBruce Microsoft MVP獎項
圖一:Microsoft MVP獎項
KKBruce 2012 Microsoft MVP獎盃
圖二:2012 Microsoft MVP獎盃

Microsoft MVP得獎感言

我不知道,我是不是很「感覺」的人?為什麼說很感覺呢?從開啟這個KingKong Bruce記事已經快滿5年的時間,除了一些在生活上的感想外,主要有很大一部分是以技術為主的文章內容,在學習這些以Microsoft為主的技術路上,常常覺得這些Microsoft MVP對於技術出神入化,只有嘆為觀止可以形容,常常有那種抬頭看天的感覺,人就是那麼奇怪,想追求平凡又不甘於平凡,我給自己一個夢想,想像有一天我也能成為一位Microsoft MVP

從有那個夢開始,我慢慢觀察網路上這些Microsoft MVP,我發現我錯了,這些Microsoft MVP們除有擁有技術外,更重要的是有一顆幫助別人的心,你很難想像,一位未曾謀面Microsoft MVP,使用MSN從頭到尾只和你聊"程式",有空還會問你說,最近還有沒有什麼新鮮貨(新文章),害得我想不長進都不行。

還有,當你看到突然有Microsoft MVP跑來你的Blog上指導時,我心想,我只是個無名小卒,怎會讓這些大腳、起大腳(台)的Microsoft MVP願意來我的Blog上指導我,意外之外,我了解到技術非第一,還是那句「有一顆助人的心」。

去年年底,不知道為什麼,我很想、非常想、超級想試試看去申請Microsoft MVP,我就在MSN上問Allen大大一些關於Microsoft MVP資格問題,原來申請Microsoft MVP有二種方式:
  • 毛遂自薦
  • 他人推薦
我是自己寫信去 mvpga@microsoft.com 要申請表格來填寫,不過好玩的事是幾天後,我在Plurk上收到一則私人息訊,發訊者是現任Microsoft MVP 91哥,他問我要不要去申請Microsoft MVP,我又嚇到了,這些Microsoft MVP的通靈能力也太強了吧!我又沒和任何人提過我想申請Microsoft MVP,感謝之餘,更讓我確定要去申請這個Microsoft MVP獎項。

在我寄送出申請表格之後的幾週後,有一天我的E-Mail裡寄來一封信,怎麼是Microsoft MVP的申請表格,一看,原來是我的老師MISLab2000寄來的,我很不意思說我已經寄出申請表格了,不過我心想,看來我的感覺是對的,就是這一次。

身體健康最重要

我要在得獎感言最後寫得病的心路歷程。可以得這個獎,我還感謝我的病「甲狀腺機能亢進」。

約半年多前的幾個月,我變成了超人,因為經常性失眠,這個失眠不是睡不著,而是睡一下下就睡飽了,天未亮雞未啼人已起,起來沒事做,就坐在電腦前看看資料、寫寫文章,所以今年文章的產量非常不錯。

因為平常坐得久,都有在小心控制飲食,就在發病的那一個月裡,我突然廋了十三公斤之多,我才在想怎麼這個月的效果超好,可以把心得拿來出書賺點奶粉錢,就在幾天後的早上,我帶著小花去散步,才走沒多久就覺得不舒服,回到家已經是臉色慘白加喘不過氣。

那個月的平均心跳在140上下,常常感到累而就在我家地板上睡著,選擇在地板上睡是因為很熱,心跳快加上新陳代謝也快,所以那一二個月的時間,我都無法在床上睡覺,醫生說,我那時的新陳代謝就算坐著不動,也是平常人的三~四倍,難怪會廋那麼快。

這讓我想到一位Visual Basic的前輩王國榮,我們那個年代,大概學Visual Basic的沒有一位不拜讀他的作品,後來好像生病引退了。

追求不平凡,要有健康的身體。

申請Microsoft MVP參考資料

  1. 什麼是微軟最有價值專家?
  2. 申請Microsoft MVP報名表
  3. Microsoft MVP常見問題集

.NET Framework - 加快學習速度的捷徑

舊未讀,新又來。
舊的未讀,新的又來。
舊的未讀熟,新的又來亂。(by KKBruce)
走微軟 .NET Framework 技術這條路,必須有足夠的「精、氣、神」,不然可能走不到三分之一,都已經陣亡了。

以 .NET Framwork 本身來說,要讀完整個 .NET Framework 類別庫基本上是有點不可能的任務(不可能不是代表沒有)。除了 .NET Framework 類別庫,我們還必須熟悉「程式語言」即Visual Basic、C#…,再來,Visual Studio 開發工具的使用,最後,選擇要寫 WinForm 還是 WebForm,或是說專案類別。

學習.NET Framework

學習.NET Framework,我歸類下來:


Visual Studio 開發工具"三顆星"不是不重要,它可能是唯一要付費取得,越熟悉它,你就能得到越快越有品質的開發,例如,如果你願意花時間去背「Visual Studio 快速鍵」,或是使用「擴充組件庫」來加強整個 Visual Studio,那能得到的效益可是很大。但它只是一個 UI, 一個 Tool UI,讓你可以去 Coding 與 Design,就基礎的重要性而言,它就沒有類別庫程式語言本身重要。

以我現在開啟的 Visual Studio 11 裡 Visual Basic 之下的專案有:
  • Windows
    • Windows Forms Application
    • WPF Application
    • Console Application
    • Class Library
    • Portable Class Library
    • WPF Browser Application
    • Empty Project
    • Windows Service
    • WPF Custom Control Library
    • WPF User Control Library
    • Windows Forms Control Library
  • Extensibility
  • Web
  • Office
  • Reporting
  • SharePoint
  • Silverlight
  • Test
  • WCF
  • Windows Azure
  • Workflow
每一個專案之下還有許多個子專案,每個專案多少有自己的專有知識,例如,寫 Windows Forms 與寫 Web Forms 就是兩回事,寫 Web Forms 與寫 ASP.NET MVC 又是兩回事,或是說,寫 Web 與寫 Silverlight 又是兩回事,寫 Web Service 與 WCF 又是兩回事。所以說,除了類別庫、程式語言、開發工具,你還要了解專案裡的專業知識。這樣總合起來,大概就是你在 .NET Framework 的基本功力。

這才基本功力?對,這才基本功力,因為程式設計本身就是一門大學問,簡單的有演算法的設計、程式碼的撰寫、變數的命名-定義-使用、迴圈的使用…等。中階可能是物件導向(OOP)的使用…等,進階可能是設計模式、重構…等。

上述的基本功,一般人練到有點內功的話,我抓,二年~三年吧。神人是有,我想大概就是那些 Microsoft MVP,能無師自通、舉一反三。那我們一般人怎麼辦?能不能加快學習速度?我想是可以的。