Thứ Ba, 30 tháng 9, 2008

Tạo Snippet cho VS C# 2005 bằng notepad

Code Snippet là một trong những công cụ tích hợp hỗ trợ cho việc lập trình trên môi trường .Net.
Với các snippet, các bạn có thể dễ dàng thêm một đoạn code mẫu, hoặc code thường dùng với chỉ vài "từ khóa". Sử dụng hiệu quả các code snippet có thể giúp người lập trình giảm tải trong việc gõ các dòng code dài dòng nhàm chán, giúp tiết kiệm thời gian và hiệu quả coding cao hơn.
Một số snippet có sẵn trong VS C# 2005:
"ctor" + tab -> tạo một constructor cho lớp hiện tại
"for" + tab -> chèn một block biểu thức lặp "for" vào vị trí hiện tại
.. bạn có thể nhấn tổ hợp phím tắt Ctrl + K + X để vào menu Insert Snippet và xem các snippet mặc định.
Ngoài ra, bạn cũng có thể tự tạo một snippet thân quen cho mình. Dưới đây, mình xin giới thiệu cách tạo một snippet đơn giản bằng notepad:
Mục tiêu : một snippet với keyword: "pubm" để thêm một phương thức có dạng:
public <return_type> Method()
{
return <return_type>;
}
Step 1: mở notepad và soạn thảo mẫu xml sau:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>pubm</Title>
<Shortcut>pubm</Shortcut>
<Description>Create public method</Description>
<Author>Hung.Trinh</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>

<Declarations>
<Literal Editable="true">

<ID>returntype</ID> <ToolTip>Return type</ToolTip> <Function></Function> <Default>void</Default>
</Literal>
<Literal Editable="true">
<ID>methodname</ID> <ToolTip>Method name</ToolTip> <Function></Function> <Default>MethodName</Default>

</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[public $returntype$ $methodname$ () { return ($returntype$)$end$; }]]>

</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
trong rừng code này, bạn chỉ cần quan tâm các thẻ:
"Declarations" --> định nghĩa các field dùng trong code mẫu
"Literal" --> định nghĩa từng field sẽ dùng và thuộc tính của từng field
"ID" --> tên 1 field (ví dụ returntype --> khi dùng: $returntype$, methodname -> $methodname)
"Default" --> giá trị mặc định của 1 field (ví dụ returntype -> void, ..)
và vùng dữ liệu từ sau ký tự "[" của thẻ "<![CDATA[" đó sẽ là đoạn code mà bạn cần chèn. Ở đây đoạn code đó là :
public $returntype$ $methodname$ ()
{
return ($returntype$)$end$;
}
với "$returntype$", "$methodname$" là các field đã được định nghĩa trước trong phần "Declaration".
Step 2: lưu nội dung này lại với tên file là "pubm.snippet" và copy vào thư mục:
"../My Documents/Visual Studio 2005/Code Snippets/Visual C#/My Code Snippets"
hoặc vào VS C# 2005 -> Tools -> Code Snippets Manager.. -> Import, chỉ đường dẫn đến file "pubm.snippet".
Bây giờ mở một cửa sổ lớp trong C# 2005, bạn đã có thể tận hưởng snippet của mình bằng tổ hợp phím Ctrl + K + X, hoặc chỉ cần đơn thuần type: "pubm" + tab


Chúc bạn thành công.

Thứ Năm, 18 tháng 9, 2008

Code nhanh với Code Snippet từ VS .Net 2005

Để nâng cao hiệu quả thời gian code hơn, mình tìm hiểu và thấy chức năng Intellisence
Code Snippet của VS .Net 2005.

Code Snippet cung cấp một con đường tắt cho phép bạn chèn những đoạn code, thay
đổi một vài yếu tố cơ bản, cho một kết quả nhanh chóng và đúng mẫu vào rừng code
của bạn.

Từ cửa sổ soạn code, bạn có thể nhanh chóng bật danh sách snippet bằng phím tắt
Ctrl + K + X.



Và để
thao tác nhanh với các snippet đã có sẵn, bạn chỉ phải đơn giản gõ đúng từ khóa,
rồi tiếp tục nhấn tab để chấp nhận snippet chèn code mẫu vào đoạn code của bạn.
Ví dụ: - từ khóa "ctor" + Tab --> tự động sinh code của method contructor trong
lớp hiện tại



Hơn thế nữa, VS .Net cho phép bạn tự
add thêm những snippet theo thói quen code của từng cá nhân. Bạn có thể dễ dàng
soạn thảo 1 snippet thay cho đoạn code thân quen thường dùng, dễ dàng import vào
VS C#, và chuyên tâm hơn vào nội dung đoạn code. Có rất nhiều snippet mẫu được đăng trên mạng, hoặc bạn cũng có thể down hơn 400 C# snippet từ chính Snippet Library của Microsoft. Nếu muốn tự tạo một snippet của riêng mình, điều đó cũng dễ dàng thực hiện bằng tool Code Snippet Editor for C#, Confirguration Section Snippet hoặc cũng có thể tự tạo Snippet bằng notepad (updating).

Cách tạo tool install/uninstall services trong .NET 2005

Trong Visual Studio 2005 professional edition

Tạo tool install services:
Tools -> External Tools.. -> Add..

- Title: Install this service
- Command: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe
(chỉ đúng nếu .Netframework được cài ở ổ C:\Windows\"
- Arguments: $(TargetName)$(TargetExt)
- Initial Directory: $(TargetDir)
- OK

Tạo tool uninstall services:
Tools -> External Tools.. -> Add..

- Title: UnInstall this service
- Command: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe
(chỉ đúng nếu .Netframework được cài ở ổ C:\Windows\"
- Arguments: /u $(TargetName)$(TargetExt)
- Initial Directory: $(TargetDir)
- OK

2 tools này chỉ có hiệu quả với các dạng project windows services.
sau khi install service, vào run -> services.msc (hoặc vào Control Panel -> Administrator Tools -> Services) để kiểm tra danh sách các services.

Tạo một service với .Net 2005 như thế nào?

Đầu tiên, đừng nghĩ window service là gì mờ ảo, bản chất nó cũng là một application chạy một cách xấu xí không có giao diện, và luôn làm điều dấu dấu diếm diếm không ai thấy.
Để tạo một window service bằng C# với VS .Net 2005, các bạn click vài nút chuột sau:

Step1: Trong Microsoft Visual Studio -> File -> New -> Project.. (Ctrl + Shift + N)

Visual C# -> Window Service (1) -> đặt Project name -> OK

Step2: Bạn nên đặt lại tên service của mình: Right click trên màn hình Service1.cs [Design] -> Properties -> sử nội dung ô text box "ServiceName" thành tên service của bạn. Nhấn F7 để vào vùng code của Service1.cs. Tại cửa sổ code bạn sẽ thấy 3 phương thức cơ bản:
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: Add code here to start your service.
}
protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop service.
}
}

Step3: Bây giờ, bạn đã có thể build được service1 thành công. Nhưng vẫn chưa đủ để triển khai service1 vào danh sách service có trong hệ thống. Để làm điều đó, bạn cần phải gắn thêm cho service bộ installer:
Từ màn hình Service1.cs[Design] -> Right click -> Add Installer

Ở màn hình ProjectInstaller.cs[Design] có 2 component là serviceInstaller và serviceprocessInstaller.
- serviceInstaller sẽ giữ những thuộc tính về service sẽ được cài đặt bao gồm: StartType (Automatic, Manual, Disabled), Service description, .. để làm service tự động hoạt động khi mở máy, bạn cần chọn chế độ StartType = Automatic
- serviceprocessInstaller sẽ giữ thông tin tài khoản có sử dụng service: Account, Parent... ở các chế độ khác nhau của Account sẽ ảnh hưởng đến quyền hạn thực thi của service.

Ok!!Hoàn thành bước này, coi như bạn đã tạo và chuẩn bị sẵn sàng cho một service chạy trong hệ thống. Điều cần làm tiếp theo là hoàn chỉnh chức năng của service và install service vào hệ thống.
Chúc các bạn thành công.

Hints: Để kiểm tra các services chạy trong hệ thống, bạn chọn Start -> Run.. -> services.msc. Nếu có thông báo lỗi thì có nghĩa là bạn không đủ quyền hạn để kiểm tra danh sách service.

Debug Window Service với .Net 2005

Theo chỉ thị của "cấp trên", hổm rày mày mò ngồi tìm hiểu "Làm sao để debug được service trong VS .Net 2005 ta?". Tới bi giờ có thể nhẹ nhõm báo cáo "sếp" biết rùi!!(mừng húm hi hi). Dưới đây mình sẽ tóm tắt vài bước chấp vá các mảnh:

Điều kiện:
- Môi trường VS .Net 2005 professional edition (bản express ko có cho dính dáng gì đến services cả -> rầu)
- Mặc định là đã có một service với tên là MyDemoService: (Tạo một service như thế nào?)
  1. file name : MyDemoService.cs
  2. class name: MyDemoService
và project đang được mở bằng VS .Net 2005 professional edition (hoặc phiên bản cao hơn)
- Mặc định là build service không lỗi, install service thành công vào hệ thống.

Step 1: Kiểm tra configuration mode của solution phải ở chế độ "Debug". Để thay đổi, bạn chọn menu Build -> Configuration Manager.. tại combobox "Active solution configuration" bạn chọn "Debug" -> Close.
- Tại đây, bạn đã có thể nhấn F5 để chạy Debug thử, bạn vẫn có thể đặt breakpoin ở bất cứ đâu, nhưng VS sẽ chỉ cho phép debug trong phạm vi hàm "Main()" trong file Program.cs thôi. Nếu vẫn cố gắng F5, bạn sẽ nhận được thông báo lỗi:

Step2: Nào ta cùng bắt tay vào công việc chính
- Mở file Program.cs, trong hàm static void Main(..), bạn thêm các dòng code sau:
ServicesToRun = new ServiceBase[] { new Service1() }; #if(DEBUG) System.Diagnostics.Debugger.Launch();
//.. code and code
#endif
ServiceBase.Run(ServicesToRun);
Step3: Build serivce lại, uninstall phiên bản cũ và install service lại.
Đặt breakpoint ở bất cứ đâu bạn muốn, miễn là còn trong vùng code của project.
Step4: Start service của bạn trong của sổ services manager hoặc bằng command. Khi service khởi động, bạn sẽ nhận được một bảng thông báo như sau:

tiếp tục chọn tên service của bạn (1) và nhấn Yes.
!!Oho!!Điều kỳ diệu đã xảy ra, nếu bạn thấy kết quả tương tự như hình sau:

thì bạn đã thành công và tiếp tục nhấn F5 để đến những breakpoint đã đặt trước.

Lưu ý: chỉ có các breakpoint được đặt ở những vị trí code phía sau dòng lệnh "System.Diagnostics.Debugger.Launch();" khả dụng.

Vài ghi chú đầu tiên, chưa có chỉnh sửa hoa mỹ, mong các bạn đọc thông cảm ủng hộ.

Another way: Debug a running process.. (coming soon)
Photobucket