2011年10月17日 星期一

Visual Studio 2010 程式碼協助工具 - Code Tool

使用Visual Studio進行程式開發時,常常為了需要找到一段曾經寫過的程式碼或是共用的部份而需要翻遍整個專案,或在過去寫過的專案尋找,雖然Visual Studio有內建了Code Snippets的功能,不過我實在不常用它,而且似乎沒有一個快速分享給其他人的方式.

這個工具的主要目的就是可以在Visual Studio中快速插入常用的程式碼片段,也可以儲存正在開發檔案中的程式碼片段.資料的存取方式則是透過一個WCF的服務來進行Visual Studio與DB的溝通.這樣一來也可以讓一起開發的人員共用所有的程式碼片段內容.

1. 先選取要加入的程式碼片段,然後使用滑鼠右鍵選擇CodeTool->Save Code


2. 視窗可以看到已經將選擇的程式碼片段加入,填入程式碼片段名稱並選擇分類




3. 要加入程式碼片段只要在要填入的位置使用滑鼠右鍵選擇CodeTool->Insert Code


4. 在視窗左邊先選擇分類並展開,選取程式碼片段名稱就可以看到對應的程式碼片段內容


5. 點選Insert進行插入.

2011年10月7日 星期五

ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution

現有的Visual Studio 2010已經整合了Web Deploy (Web Deployment Tool)工具,大體來說在佈署上解決了不少佈署上的困擾,不過總覺得每次都一大包的把所有東西重新佈署一次,實在是有點麻煩.

因此根據了一些簡單的需求,設計了一個可以將功能分散在不同壓縮檔的佈署方式,以下就介紹這個解決方案:

1. 假設現在要開發一個新的功能,新增一個專案選擇Visual C# -> Likol -> Web Feature,並命名為ProductFeature


此專案範本是由空的ASP.NET網站範本修改而來,並加入一個source.webfeature檔案與修改了建置專案的細節.

2. 我在專案中加入了一個Product的目錄,並新增了ListForm NewForm EditForm三個ASPX程式,也就是要用來進行佈署的程式.


3. 選擇source.webfeature並開啟檔案,即可看到佈署的設定界面.


上面的四個欄位就是佈署時的一些資訊,比較重要的是下面的兩個部份
I. Assemblies 代表所要包含的組件檔
II. Files 表示要加入的ASPX或是ASCX的檔案

4. 選擇Add Assembly,於跳出的視窗中選擇Output並確定.


這個動作將會在Assemblies加入一筆資料,並標示Type為Output,也就是會把這個專案編譯出來的組件(DLL)加入佈署中.



5. 另外,當然也可以額外指定其他的組件(DLL)檔案,加入佈署.




6. 選完組件後,就是透過Add File來選擇要加入的檔案,在選擇的視窗中僅可以選擇在專案中的檔案


如果檔案已經加入,則不會顯示出來




7. 設定完成後,直接執行Visual Studio的建置專案,建置完成後,就可以在專案的目錄中找到"_WebFeature"的目錄,裡面以GUID為檔名的檔案就是要進行佈署的檔案.


可以看到剛剛所選擇的檔案都有包含在內.


8. 在佈署的部份,目前是先用一個簡單的Web程式進行佈署,將上述產生的佈署檔案,透過一支ASPX上傳,就可以將相關組件與檔案佈署至Web Application中.




為了整個解決方案可以很容易並順暢,因此在與Visual Studio整合上花了不少時間,主要的部份也就是:

A. Visual Studio 2010 自訂編輯器 - Custom Editor
B. Visual Studio 2010 自訂建置工作項目 - Custom MSBuild Task

實做了這兩項功能,整個流程就大大的不一樣了.

2011年10月4日 星期二

Visual Studio 2010 自訂建置工作項目 - Custom MSBuild Task

在Visual Studio中方案或是專案的編譯,其實是透過一個叫做MSBuild(Microsoft Build Engine)的平台來執行,它會根據在專案(.csproj)的XML描述來進行編譯的判斷與順序.

在MSBuild定義中是依靠許多已經內建的工作項目(Task)來進行處理,因此我們也可以透過撰寫Task的方式來達到我們想要的建置動作.

參考資料:
A. How to: Extend the Visual Studio Build Process
B. Task Writing

在這裡我想要達到的功能是:在專案建置完成後,會根據一個XML檔案內容,將指定的檔案壓縮到一個Zip中.

1. 建立BuildWebFeature的Task,它會讀取source.webfeature這個檔案,然後根據內容把相關的檔案加入一個用Guid為檔案名稱的Zip中.

2. 在C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Likol\中,加入一個Likol.target,並加入要執行的MSBuild定義(部份如下),並將建置的Task Assembly檔案一併複製過來


3. 使用一般的文字編輯器開啟我們要加入建置動作的專案檔,並加入以下的內容


4. 完成後使用Visual Studio建置該專案,完成後就會產生一個Zip的壓縮檔.

Visual Studio 2010 自訂編輯器 - Custom Editor

在Visual Studio中其實每一種副檔案都會對應到一個特定的編輯器,不同的編輯器又會有不同的檢視方式.例如Web Form就有設計與程式碼的兩種檢視方式,而XML編輯器就只有程式碼的檢視.

在Visual Studio SDK中,有一個非常不錯的範例.

Designer View Over XML Editor
範例所展示的功能是,當我們在進行XML檔案的編輯時,通常只能使用程式碼的檢視方式.



透過自訂編輯器,可以根據XML的格式來定義出UI進行編輯作業,一方面可以更容易進行XML的維護,一方面也可以有效的控制格式的正確性.


其實當安裝了Visual Studio 2010在進行Visual Studio Package的開發時,也有類似的編輯器功能.




在這篇文章中也使用相同的方式製做了一個編輯器,來進行XML檔案的維護界面.




稍微比較特別的是,透過這樣的編輯方式一樣會有編輯復原的功能可以使用.