Gii thiu mt s công c ca .NET
Phn ph lc này gii thiu mt s công c nh (hu hết là min phí) nhưng rt tt cho
các nhà phát trin .NET, trong đó có nhng công c giúp phát trin ng dng nhanh hơn
và có nhng công c có th làm thay đổi cách thc viết mã lnh ca bn.
1. Biên dch các đon mã ngn vi Snippet Compiler
2. Xây dng biu thc chính quy vi Regulator
3. Sinh mã vi CodeSmith
4. Viết kim th đơn v vi NUnit
5. Kim soát mã lnh vi FxCop
6. Kho sát assembly vi .NET Reflector
7. Lp tài liu mã lnh vi NDoc
8. To dng gii pháp vi NAnt
9. Các công c chuyn đổi: ASP.NET Version Switcher, Visual Studio .NET Project
Converter, VB.NET to C# Converter, và Convert C# to VB.NET
10. Xây dng website qun tr cơ s d liu vi ASP.NET Maker 1.1
1. A.1 Biên dch các đon mã ngn vi Snippet Compiler
Snippet Compiler là mt ng dng nh dùng để viết, biên dch, và chy mã lnh. Công c
này hu ích khi bn có nhng đon mã ngn và bn không mun phi to toàn b d án
Visual Studio .NET (cùng vi các file đi kèm) cho chúng.
Ly ví d, gi s bn mun chy mt ng dng nào đó t Microsoft .NET Framework.
Trong Snippet Compiler, bn hãy to mt ng dng Console mi. Phn mã lnh có th
được to bên trong phương thc Main ca ng dng này. Đon mã dưới đây trình bày
cách to mt th hin ca Notepad t .NET Framework:
using System;
using System.Collections;
public class MyClass
{
public static void Main()
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName= "notepad.exe";
proc.Start();
proc.WaitForExit();
}
}
Hình A-1 Snippet Compiler
Hình A-1 cho thy đon mã này trong Snippet Compiler. Để th nghim đon mã này,
bn ch vic nhn nút Play (hình tam giác xanh), và nó s chy chế độ g ri. Đon mã
này s sinh ra mt ca s pop-up (ng dng Console), và Notepad s xut hin. Khi bn
đóng Notepad, ng dng Console cũng s đóng.
1. Snippet Compiler được viết bi Jeff Key và có th được download ti
[http://www.sliver.com/dotnet/SnippetCompiler].
2. A.2 Xây dng biu thc chính quy vi Regulator
Regulator là mt công c vi đầy đủ tính năng dùng để xây dng và kim tra các biu
thc chính quy. Biu thc chính quy được s dng để định nghĩa các mu trong nhng
chui da trên ký t, tn s xut hin, và th t ký t. Chúng thường được s dng nhiu
nht để làm phương tin xác nhn tính tính hp l ca đầu vào do người dùng cung cp
hoc tìm mt chui ký t bên trong mt chui ln hơn—chng hn, khi tìm kiếm mt địa
ch URL hay e-mail trên mt trang web.
Regulator cho phép bn nhp mt biu thc chính quy và mt đầu vào nào đó (bn s
chy biu thc chính quy da trên đầu vào này). Bng cách này, bn có th thy cách
thc làm vic ca biu thc chính quy và kết qu tr v trước khi hin thc nó trong ng
dng ca mình. Hình A-2 cho thy Regulator vi mt biu thc chính quy đơn gin.
The image part w ith r elationship ID r Id 5 was not foun d in t he file.
Hình A-2 Regulator vi mt biu thc chính quy đơn gin
Phn document cha biu thc chính quy, trong ví d này là [0-9]*, biu thc này trùng
khp vi bt k dãy ch s nào. Hp phía dưới phi cha đầu vào cho biu thc chính
quy, và hp phía dưới trái hin th nhng trùng khp mà biu thc chính quy tìm thy
bên trong các đầu vào. Viết và kim tra các biu thc chính quy trong mt ng dng độc
lp như thế này thì d hơn nhiu so vi thao tác chúng trong ng dng ca bn.
Mt trong nhng tính năng hay nht ca Regulator là kh năng tìm kiếm thư vin biu
thc chính quy trc tuyến ti [http://regexlib.com]. Ví d, nếu nhp chui "phone" vào
hp tìm kiếm, bn s tìm thy hơn 20 biu thc chính quy khác nhau trùng khp vi các
s đin thoi, bao gm các biu thc cho Anh, Úc, và nhiu s đin thoi khác.
2. Regulator đưc viết bi Roy Osherove và có th được download ti
[http://regex.osherove.com].
3. A.3 Sinh mã vi CodeSmith
CodeSmith là mt công c sinh mã da-trên-template (khuôn mu), s dng mt cú pháp
tương t như ASP.NET để kết sinh bt k kiu mã hay text nào. Khác vi nhiu công c
sinh mã khác, CodeSmith không yêu cu bn mô t mt bn thiết kế hay kiến trúc ng
dng c th. Khi s dng CodeSmith, bn có th kết sinh mi th, t mt tp hp đơn
gin, được-định-kiu-mnh đến toàn b mt ng dng.
Khi xây dng mt ng dng, bn thường phi lp đi lp li nhng tác v nào đó, chng
hn viết mã truy xut d liu hay xây dng các tp hp tùy biến. CodeSmith đặc bit hu
ích trong nhng tình hung như vy, vì bn có th viết các template để t động hóa các
tác v này, điu này không ch ci thin hiu năng mà còn giúp bn bt nhàm chán.
The image part w ith r elationship ID r Id 6 was not foun d in t he file.
CodeSmith có sn mt s template, bao gm nhng template cho tt c các kiu tp hp
.NET cũng như nhng template để sinh th tc tn tr, nhưng sc mnh thc s ca công
c này chính là kh năng to các template tùy biến.
Template ca CodeSmith ch là file văn bn đơn thun (có th được to bng công c
son tho văn bn bt k), vi phn m rng là .cst.
Template được gii thiu dưới đây s nhn mt chui và ri xây dng mt lp da vào
chui đó. Bước đầu tiên là viết phn header, phn này khai báo ngôn ng ca template,
ngôn ng đích, và mô t vn tt v template:
<%@ CodeTemplate Language="C#"
TargetLanguage="C#"
Description="Car Template" %>
Phn kế tiếp ca template là các khai báo thuc tính, các thuc tính này s được ch định
mi khi template chy. Ví d dưới đây khai báo mt thuc tính chui:
<%@ Property Name="ClassName" Type="String" Category="Context"
Description="Class Name" %>
Khai báo này s làm cho thuc tính ClassName xut hin trong ca s thuc tính ca
CodeSmith để nó có th được ch định khi template chy.
Bước tiếp theo là xây dng phn thân ca template (vi mã lnh tương t như ASP.NET).
Như bn có th thy, template này nhn chui nhp và sinh ra mt lp vi tên đó. Trong
phn thân ca template, các th đóng và m được s dng như trong ASP.NET. Trong
template này, ta ch chèn giá tr thuc tính, nhưng cũng có th s dng bt k kiu mã
.NET nào bên trong các th này.
public sealed class <%= ClassName %>
{
private static volatile <%= ClassName %> _instance;
private <%= ClassName %>() {}
private static readonly object _syncRoot = new object();
public static <%= ClassName %> Value
{
get
{
if (_instance == null)
{
lock(_syncRoot)
{
if (_instance == null)
{
_instance = new <%= ClassName %>();
}
}
}
return _instance;
}
}
}
Mt khi template đã hoàn tt, bn hãy np nó vào CodeSmith (xem hình A-3). Bn có th
nhn thy thuc tính phía bên trái là thuc tính mà chúng ta đã khai báo trong template.
Nếu bn nhp “SingletonClass” làm tên lp và nhp nút Generate, CodeSmith s sinh ra
lp dưới đây:
public sealed class SingletonClass
{
private static volatile SingletonClass _instance;
private SingletonClass() {}
private static readonly object _syncRoot = new object();
public static SingletonClass Value
{
get
{
if (_instance == null)
{
lock(_syncRoot)
{
if (_instance == null)
{
_instance = new SingletonClass();
}
}
}
return _instance;
}
}
}