Tải bản đầy đủ (.pdf) (94 trang)

Xây dựng hệ thống hỗ trợ tra cứu lỗi lập trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.21 MB, 94 trang )


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC DÂN LẬP KỸ THUẬT CÔNG NGHỆ
KHOA CÔNG NGHỆ THÔNG TIN
= = =  = = =






LUẬN VĂN TỐT NGHIỆP

ĐỀ TÀI:
XÂY DỰNG HỆ THỐNG HỖ TRỢ
TRA CỨU LỖI LẬP TRÌNH







GVHD : NGUYỄN CHÁNH THÀNH
SVTH : NGUYỄN DUY HÒA – MSSV: 10102062
VÕ ĐỨC HIỀN – MSSV: 10102056
LỚP : 01CNPM







Thaønh phoá Hoà Chí Minh, Thaùng 01 - 2006

MỤC LỤC



Chương I: GIỚI THIỆU VỂ ĐỀ TÀI1
I. Giới thiệu1
II.Chức năng1

Chương II: KIẾN THỨC MÔI TRƯỜNG PHÁT TRIỂN VÀ ADD-IN2
I. Môi trường phát triển DTE2
I.1. Đối tượng DTE2
I.2. Thêm một tham chiếu tới không gian tên EnvDTE4
I.3. Tham chiếu đối tượng DTE 5
I.4. Những đối tượng chính trong project5
I.4.1. Đối tượng Events5
I.4.2. Đối tượng BuildEvents6
I.4.3. Đối tượng CommandEvents7
I.4.4. Đối tượng TaskListEvents8
I.4.5. Đối tượng OutputWindowEvents9
I.4.6. Đối tượng Window10
I.4.7. Đối tượng OutputWindowPane10
II. Kỷ thuật Add-In11
II.1. Tạo một đối tượng Add-in12
II.2. Các bước tạo đối tượng Add-in bằng Wizard12
II.3. Kết quả các lệnh của đối tượng Add-in14
II.4. Để phục hồi các lệnh của đối tượng Add-in tới menu14

II.5. Điều khiển đối tượng Add-In với Add-In Manager15
II.6. Để nạp một đối tượng Add-In ngay tức thì16
II.7. Chỉ định Add-in nạp lên khi môi trường khởi động16
II.8. Triệu gọi các đối tượng Add-In thông qua dòng lệnh Devenv17
II.9. Đăng ký đối tượng Add-In17
II.10.Các sự kiện chính trong Add-In project19
II.10.1. Phương thức OnConnect19
II.10.2. Phương thức OnStartupComplete21
II.10.3. Phương thức OnAddInsUpdate22
II.10.4. Phương thức OnBeginShutdown23
II.10.5. Phương thức OnDisconnection24

Chương III: KIẾN THỨC WEB SERVICE26
I. Giới thiệu về Web Service26
I.1. Vấn đề chia sẽ dữ liệu26
I.2. Giải quyết bằng phát triển các ứng dụng phân tán26
I.3. Web Service27
I.3.1. Các đặc điểm của Web service27
I.3.2. Lợi ích khi sử dụng Web service28
II. Cơ sở hạ tầng Web Services28
II.1. Các chuẩn và giao thức28
II.2. Các thành phần của Web service29
II.2.1. Web service Directories29
II.2.2. Web service Discovery30
II.2.3. Web service Description30
II.2.4. Web service Wire Format30
II.3. Giao tiếp giữa Client và Web service31
III. Giao thức triệu gọi Web Services31
III.1. HTTP-GET31
III.2. HTTP-POST33

III.3. SOAP33
IV. Xây dựng, triển khai và sử dụng Web Service34
IV.1. Xây dựng Web service34
IV.2. Triển khai Web service36
IV.2.1. Triển khai Web service bằng cách copy36
IV.2.2. Các thành phần được triển khai trong Web service37
IV.2.3. Sử dụng Web service38
IV.2.3.1 Thêm Web Reference vào ứng dụng khách(client)38
IV.2.3.2 Phát sinh lớp Proxy40
IV.2.3.3 Tạo một đối tượng của lớp Proxy41
IV.2.3.4 Truy xuất Web Service sử dụng một đối tượng proxy42
V. Bảo mật42
V.1. Authentication43
V.1.1. Anonymous Access44
V.1.2. Windows Authentication45
V.1.2.1. Role - Base Security45
V.1.2.2. Basic Authentication46
V.1.2.3. Digest Authentication46
V.1.2.4. Integrated Windows Authentication47
V.1.3. Passport Authentication47
V.1.4. Form Authentication47
V.1.4.1. Login Form48
V.1.4.2. Định dạng IIS48
V.1.4.3. Định dạng ASP.NET49
V.2. Authorization49
V.2.1. File Authorization49
V.2.2. URL Authorization50

Chương IV: PHÂN TÍCH - THIẾT KẾ - THỰC HIỆN52
I. Phân tích52

I.1. Nhiệm vụ52
I.2. Phương án52
I.2.1. Xây dựng ứng dụng Admin Website
và Web Service theo mô hình đa tầng52
I.2.2. Xây dựng Web Client theo mô hình phân tán
sử dụng công nghệ Web Service54
I.2.3. Sử dụng hệ quản trị cơ sở dữ liệu SQL Server 200054
I.2.4. Ngôn ngữ sử dụng: ASP.NET54
I.2.5. Phân tích các nghiệp vụ của hệ thồng bằng ngôn ngữ UML55
I.2.6. Xây dựng add-in55
II. Thiết kế và thực hiện56
II.1. Thiết kế cơ sở dữ liệu56
II.1.1. Biểu đồ quan hệ56
II.1.2. Các bảng dữ liệu của hệ thống58
II.1.2.1. Bảng ErrorCode58
II.1.2.2. Bảng ErrorItems58
II.1.2.3. Bảng Items58
II.1.2.4. Bảng Chapters58
II.1.2.5. Bảng Parts59
II.1.2.6. Bảng Books59
II.1.2.7. Bảng Users59
II.1.3. Các StoreProcedure59
II.2. Phân tích hệ thống61
II.2.1. Sơ đồ họat động61
II.2.2 Sơ đồ tuần tự chức năng của Add-in63
II.2.3. Sơ đồ tuần tự chức năng Web Admin64
II.2.3.1. Sơ đồ tuần tự chức năng quản lý sách64
II.2.3.2. Sơ đồ tuần tự chức năng quản lý phần trong sách65
II.2.3.3. Sơ đồ tuần tự chức năng quản lý chương66
II.2.3.4. Sơ đồ tuần tự chức năng quản lý mục67

II.2.3.5. Sơ đồ tuần tự chức năng quản lý lỗi68
II.2.3.6. Sơ đồ tuần tự chức năng quản lý thêm mục vào lỗi69
II.2.3.7. Sơ đồ tuần tự chức năng quản lý chi tiết lỗi70
II.2.4. Sơ đồ tuần tự cho chức năng tìm kiếm trong Web Client71
II.3. Phần Add-In72
II.3.1. Cài đặt phần Add-in72
II.3.2. Thêm đối tượng Add-in thông qua hộp thoại Add-in Manager73
II.3.3. Hiển thị danh sách lỗi73
II.3.4. Hiển trị trang thông tin chi tiết lỗi74
II.4. Phần Web Admin75
II.4.1. Màn hình chính quản lý sách75
II.4.2. Màn hình chi tiết sách76
II.4.3. Màn hình thêm sách mới76
II.4.4. Màn hình xoá sách77
II.4.5. Màn hình chỉnh sửa sách78
II.4.6. Màn hình quản lý phần(Parts)78
II.4.7. Màn hình quản lý chương79
II.4.8. Màn hình quản lý mục80
II.4.9. Màn hình chi tiết và cập nhật nội dung mục80
II.4.10.Màn hình thêm mục mới81
II.4.11.Màn hình quản lý lỗi81
II.4.12.Màn hình chi tiết lỗi82
II.4.13.Màn hình xoá lỗi83
II.4.14.Màn hình thêm mục cho lỗi83
II.5. Phần Web Client84
II.5.1. Màn hình tìm kiếm84
II.5.2. Màn hình nội dung mục liên quan đến lỗi85
II.6. Phần Web Service85
II.6.1. Tổng quát85
II.6.2. Chi tiết các phương thức86


Chương V: ĐÁNH GIÁ DỰ ÁN VÀ HƯỚNG PHÁT TRIỂN87
I. Đánh giá87
I.1. Hoàn thành87
I.2. Chưa hoàn thành87
II. Hướng phát triển87
LỜI CẢM ƠN


Luận văn tốt nghiệp là một trong những sự kiện
quan trong đời người, và ngày hôm nay chúng em đã
hoàn thành được điều ấy. Và điều mà chúng em muốn nói
đến đầu tiên là lời chân thành cảm ơn sâu sắc đến bậc
thầy cô, nhất là tất cả thầy cô giáo trường Đại Học
Kỹ thuật Công Nghệ, đặc biệt là đội ngũ thầy cô giáo
khoa Công Nghệ Thông Tin đã tận tình dạy dỗ, truyền
đạt những kiến thức vô cùng quý báo để cho chúng em
có thể hoàn thành được đề án tốt nghiệp như ngày hôm
nay.
Và đặc biệt cảm ơn đến thầy Nguyễn Chánh Thành,
người đã tận tình hướng dẫn chúng em thực hiện tốt đề
tài này.
Và cũng xin gởi lời cảm ơn đến các bạn, những
người đã có những gớp ý chân thành và quý giá trong
quá trình thực hiện đề tài này.
Dù có nhiều nổ lực trong quá trình hiện thực đề
tài, nhưng ở lần đầu tiên nên cũng khó tránh khỏi
những vương mắc và sai sót. Chúng em rất mong nhận
được những ý kiến đóng góp, và sự hướng dẫn chân tình
của quý thầy cô.






Xin chân thành cảm ơn.





TP .HCM, Tháng 1 / 2006
 Luận văn tốt nghiệp Chương 1

Nguyễn Duy Hoà V õ Đức Hiền Trang 1

Chương I: GIỚI THIỆU VỂ ĐỀ TÀI
I. Giới thiệu
Lập trình là một công việc vô cùng khó khăn, đòi hỏi lập trình viên phải
có kiến thức rộng rãi cũng như một kỹ năng lập trình tốt để có thể bắt tay thực
hiện các dự án phần mềm. Vấn đề một người lập trình cần có 1 công cụ hỗ trợ
nhằm giải đáp các thắc mắc liên quan đến kiến thức lập trình là nhu cầu rất
thiết thực trong quá trình dạy học trong ngành Công nghệ thông tin để có thể có
công cụ nào giúp trút bớt gánh nặng trong việc lập trình. Đề tài “Xây dựng hệ
thống hỗ trợ tra cứu lỗi lập trình trong môi trường lập trình Visual Studio
.NET 2003” mà chúng tôi nhận thật sự là một điều mà không chỉ cá nhân tôi
mà rất nhiều các lập trình viên khác hằng mong ước.
Đề tài này xây dựng một công cụ hỗ trợ việc tra cứu lỗi trong môi
trường lập trình Visual Studio .NET 2003. Công cụ này bao gồm 2 phần; phần
add-in tương tác với môi trường phát triển của VS.Net 2003 (IDE), ngoài ra

còn hổ trợ thêm một Web Server cho phép phần add-in truy cập tới kho dữ liệu
để nhận về thông tin liên quan đến lỗi. Ngoài ra, Web Server còn cho phép các
client đăng ký, truy cập và xem các thông tin về lỗi.

II. Chức năng
Đầu tiên, để sử dụng hệ thống hỗ trợ tra cứu lỗi lập trình, người dùng
cần cài đặt công cụ này. Hệ thống hỗ trợ tra cứu lỗi có các chức năng sau:
 Sau khi biên dịch, phần Add-in sẽ truy cập vào hệ thống Visual Studio
.NET 2003 lấy danh sách lỗi, và hiển thị trong tab OutputWindow.
 Từ tab OutputWindow này cho phép người dùng click vào hyperlink
bên cạnh mã lỗi để mang về thông tin liên quan đến lỗi đó.
 Đối với người quản trị cơ sở dữ liệu, họ có thể truy cập vào hệ thống
bằng quyền Admin và quản trị dữ liệu.
 Đối với người dùng thông thường, họ có thể đăng ký account, và truy
cập vào trang web để tra cứu các thông tin liên quan đến lỗi.

 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 2

Chương II: KIẾN THỨC MÔI TRƯỜNG PHÁT TRIỂN VÀ
ADD-IN
I. Môi trường phát triển DTE
I.1. Đối tượng DTE
Là đối tượng trên cùng trong mô hình đối tượng tự động hoá của bộ
Visual Studio.
Tất cả các đối tượng và các thành viên trong mô hình tự động hoá Visual
Studio.NET đều dựa trên đối tượng DTE. Đối tượng DTE tiêu biểu cho môi
trường phát triển được tích hợp trên Visual Studio.NET và là đối tượng trên
cùng trong mô hình hệ thống cấp bậc. Nó đặt trong một không gian tên gọi là

EnvDTE. Tên của sản phẩm tạo ra trên .NET đối với không gian tên này là
“envdte” và được chứa đựng trong một file gọi là envdte.dll. Tên thư viện có
dạng như COM là Microsoft Development Environment 7.0” và được chứa
đựng trong file gọi là dte.olb.
Đối tượng DTE được cung cấp tới bạn qua phương thức OnConnection
mà bạn cài đặt khi tạo ra một đối tượng Add-In. Đối tượng DTE là đối tượng
Application trong Visual Basic.
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 3


Hình 2.1: Mô hình đối tượng tự động trên Visual Studio .NET
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 4

Để truy cập tới các thuộc tính chỉ định trong dự án như VBProjects hay
CSharpProjects, hãy dùng cấu trúc DTE.GetObject(“VBProjects”).
Minh hoạ:
Sub DTEExample()
Dim objTextDoc As TextDocument
Dim objEP As EditPoint
'Tạo một tài liệu văn bản mới.
DTE.ItemOperations.NewFile("General\Text File")
'Lấy quyền điều khiển tới tài liệu mới.
Set objTextDoc = DTE.ActiveDocument.Object("TextDocument")
Set objEP = objTextDoc.StartPoint.CreateEditPoint
'Tạo một EditPoint và thêm đoạn văn bản.
objEP.Insert "A test sentence."

End Sub

I.2. Thêm một tham chiếu tới không gian tên EnvDTE
Dù bạn chọn đối tượng .NET assembly hay loại thư viện dạng COM tuỳ
thuộc vào project của bạn. Khi bạn tạo một đối tượng Add-in sử dụng trình
Add-In Wizard (trong bất kỳ ngôn ngữ nào) hay khi bạn tạo một macro, thì
một tham chiếu tới không gian tên EnvDTE được thiết lập sẵn cho bạn. Nếu
bạn muốn truy cập tới phần bên ngoài của các đối tượng tự động hoá của các
đối tượng macro hay các đối tượng Add-in được tạo bởi trình Add-In Wizard
thì bạn phải thiết lập bằng tay tham chiếu này.
Để thêm một tham chiếu tới không gian tên EnvDTE trong Visual C#
.NET, ta thực hiện như sau:
1. Trong khung Solution Explorer, bạn click phải chuột trên project
node hoặc trên Reference node và chọn AddReference.
2. Trong hộp thoại Add Reference, click vào tab có kiểu component
mà bạn muốn, như .NET hay COM. Tìm trong danh sách các
component và chọn envdte hay Microsoft Development
Environment 7.0, sau đó click OK.
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 5

I.3. Tham chiếu đối tượng DTE
Một khi project của bạn đã có tham chiếu tới môi trường EnvDTE, thì
bạn có thể thiết lập một tham chiếu tới đối tượng DTE theo đoạn code sau:
EnvDTE.DTE myDTE;
myDTE =
(EnvDTE.DTE)Microsoft.VisualBasic.Interaction.CreateObject("Vis
ualStudio.DTE.7.1", "");
-or-

EnvDTE.DTE dte;
DTE =
(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObj
ect("VisualStudio.DTE.7.1") // Lấy một thực thể của môi //
trường Visual Studio .NET IDE hiện hành đang chạy.

Nhưng để truy cập vào bên trong môi trường phát triển của VS.NET
2003, lấy mã lỗi và hiển thị trên VS.NET 2003, chương trình cần sử dụng các
đối tượng sau đây làm việc như các macro: đối tượng Events, BuildEvents,
CommandEvents, TaskListEvents, OutputWindowEvents, Window,
OutputWindowPane và các phương thức sự kiện OnConnect,
OnStartupComplete, OnAddInsUpdate, OnBeginShutdown, OnDisconnection.

I.4. Những đối tượng chính trong project
I.4.1. Đối tượng Events
Cho phép truy cập tới tất cả các sự kiện trong mô hình mở rộng. Các sự
kiện này cũng có thể được phơi bày từ các đối tượng chỉ định bên trong mô
hình mở rộng DTE.
DTE
Events
Nhận xét:
Mô hình tự động hoá chứa đựng một đối tượng sự kiện gốc Events mà
các clients cùng loại được viết ở bất kì ngôn ngữ nào cũng có thể tham chiếu
tới các sự kiện tự động hoá. Các công cụ IDE , các loại project khác nhau, có
thể thêm các sự kiện bổ sung tới đối tượng Events mà chúng chỉ định.
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 6

Minh hoạ:

Public Module Module1
Dim WithEvents bldevents As BuildEvents
Dim applicationObject As EnvDTE.DTE

Sub EventsExample()
Dim addInInstance As EnvDTE.AddIn

applicationObject = CType(Application, EnvDTE.DTE)
bldevents = CType(applicationObject.Events.BuildEvents,
EnvDTE.BuildEvents)
End Sub

Private Sub bldevents_OnBuildDone(ByVal Scope As
EnvDTE.vsBuildScope,
ByVal Action As EnvDTE.vsBuildAction) Handles
bldevents.OnBuildDone
MsgBox("Build complete")
End Sub
End Module

I.4.2. Đối tượng BuildEvents
Cung cấp các sự kiện cho giải pháp tạo dựng.
DTE
Events
BuildEvents
Thuộc tính:
public BuildEvents BuildEvents {get;}
Trả về đối tượng BuildEvents, cung cấp các sự kiện cho các giải pháp
xây dựng.
Các sự kiện:

Sự kiện
Hoạt động
OnBuildBegin
Xuất hiện trước khi solution xây dựng, trước khi
dự án bắt đầu xây dựng
OnBuildDone
Xuất hiện sau khi một solution hoàn tất quá
trình xây dựng.
OnBuildProjConfigBegin
Xuất hiện khi việc định hình một dự án bắt đầu.
OnBuildProjConfigDone
Xuất hiện khi việc định hình một dự án kết thúc.
Bảng 2.1: Sự kiện và hoạt động của đối tượng BuildEvents
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 7

I.4.3. Đối tượng CommandEvents
Cung cấp các sự kiện dòng lệnh cho các client tự động hoá.
DTE
Events
CommandEvents
Thuộc tính:
public CommandEvents CommandEvents(
string Guid,
int ID
) {get;}
Tham số:
Guid: được yêu cầu. Đây là GUID cho nhóm lệnh. Nếu Guid là
Null hoặc Nothing, thì CommandEvents trả về một đối tượng

CommandEvents tượng trưng cho tất cả các lệnh trong môi trường.
ID: được yêu cầu. Một chỉ mục trong nhóm lệnh tương ứng với
lệnh cụ thể. Nếu ID là Null hay Nothing, thì CommandEvents trả về một đối
tượng CommandEvents tượng trưng cho tất cả các lệnh trong nhóm.
Giá trị trả về:
Một đối tượng CommandEvents.
Các sự kiện:
Sự kiện
Hoạt động
AfterExecute
Xuất hiện sau khi một lệnh thực thi
BeforeExecute
Xuất hiện trước khi một lệnh thực
thi
Bảng 2.2: Sự kiện và hoạt động của đối tượng CommandEvents
Nhận xét:
Đối tượng CommandEvents được trả về bởi thuộc tính
CommandEvents của đối tượng Events.
Minh hoạ:
<System.ContextStaticAttribute()> Public WithEvents
CommandEvents As
EnvDTE.CommandEvents
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 8


Public Sub CommandEvents_AfterExecute(ByVal Guid As String,
ByVal ID As
Integer, ByVal CustomIn As Object, ByVal CustomOut As Object)

Handles
CommandEvents.AfterExecute
MsgBox("test")
End Sub

I.4.4. Đối tượng TaskListEvents
Cung cấp các sự kiện cho các thay đổi tới danh sách tác vụ.
DTE
Events
TaskListEvents
Thuộc tính:
public TaskListEvents TaskListEvents(
string Filter
) {get;}
Tham số:
Filter: tuỳ chọn. Đây là tên của danh mục tác vụ. Nếu Filter được
hỗ trợ, thì đối tượng TaskListEvents chỉ cung cấp các sự kiện cho danh mục
đó. Nếu Filter không được hỗ trợ một giá trị danh mục hợp lệ, thì thuộc tính
TastListEvents bị hỏng.
Giá trị trả về:
Một đối tượng TaskListEvents.
Các sự kiện:
Sự kiện
Hoạt động
TaskAdded
Xuất hiện khi một tác vụ mới được thêm tới Task List.
TaskModified
Xuất hiện khi một tác vụ trong Task List được sửa đổi.
TaskNavigated
Xuất hiện lập tức trước khi bạn điều hướng tới nguồn của

một tác vụ trong Task List.
TaskRemoved
Xuất hiện khi một tác vụ bị loại bỏ khỏi Task List.
Bảng 2.3: Sự kiện và hoạt động của đối tượng TaskListEvents
Ghi chú:
Đối tượng TaskListEvents được trả về bởi DTE.Events.
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 9

I.4.5. Đối tượng OutputWindowEvents
Cung cấp các thay đổi tới cửa sổ Output.
DTE
Events
OutputWindowEvents
Thuộc tính:
public OutputWindowEvents OutputWindowEvents(
string Pane
) {get;}
Tham số:
Pane: tuỳ chọn. Đây là tên của một cửa sổ kết quả Output. Nếu
Pane được hỗ trợ, thì đối tượng OutputWindowEvents chỉ cung cấp các sự
kiện cho khung đó.

Giá trị trả về:
Khung không cần phải tồn tại khi đối tượng
OutputWindowEvents được tạo. Nếu khung được tạo bất kỳ lúc nào thì các
sự kiện sẽ được tự động cung cấp cho nó.
Các sự kiện
Sự kiện

Hoạt động
PaneAdded
Xuất hiện khi một khung cửa sổ Output mới được tạo
PaneClearing
Xuất hiện khi tất cả văn bản trong khung cửa sổ Output bị xoá
PaneUpdated
Xuất hiện khi văn bản mới được thêm tới một khung trong cửa
sổ Output.
Bảng 2.4: Sự kiện và hoạt động của đối tượng OutputWindEvents
Ghi chú:
Đối tượng OutputWindowEvents được trả về bởi DTE.Events.
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 10

I.4.6. Đối tượng Window
Đối tượng Window hiển thị một cửa sổ trong môi trường.
DTE
Windows
Window
Thuộc tính:
public Window Window {get;}
Giá trị trả về:
Một đối tượng Window.
Minh hoạ:
Sub WindowExample()
Dim objTW As TextWindow
Dim objPane As TextPane
Dim objStart As TextPoint


objTW = ActiveWindow.Object
objPane = objTW.ActivePane

MsgBox("The active pane is " & Str(objPane.Height) & " lines
high and " & Str(objPane.Width) & " columns wide.")
objStart = objPane.StartPoint
MsgBox("It begins at line " & Str(objStart.Line) & ", column
" & Str(objStart.LineCharOffset) & ".")
objPane.Window.Close()
End Sub

I.4.7. Đối tượng OutputWindowPane
Hiển thị một khung trong cửa sổ Output.
DTE
Windows
Window
OutputWindow
OutputWindowPanes
OutputWindowPane
Ghi chú:
Cửa sổ Output hiển thị kết quả dạng văn bản. Cửa sổ Output có thể có
một hay nhiều khung, được hiển thị bởi đối tượng OutputWindowPane. Mỗi
công cụ IDE sự dụng một khung cửa sổ output khác nhau. Các khung được
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 11

chọn với một hộp xổ xuống tại đỉnh của cửa sổ. Chẳng hạn, quá trình build
errors thì đi với khung “Build Errors”, trong khi mỗi công cụ lệnh bên ngoài đi
với khung cửa sổ output riêng biệt của nó.

Minh hoạ:
Sub OutputWindowPaneExample()
' Create a tool window handle for the Output window.
Dim win As Window =
DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
' Create handles to the Output window and its panes.
Dim OW As OutputWindow = win.Object
Dim OWp As OutputWindowPane

' Add a new pane to the Output window.
OWp = OW.OutputWindowPanes.Add("A New Pane")
' Add a line of text to the new pane.
OWp.OutputString("Some Text")
End Sub

II. Kỷ thuật Add-In
Để tạo một công cụ cho một nhiệm vụ hoặc để tạo một công cụ để giúp
những lập trình viên khác tạo ra các phần mền của họ, bạn có thể sử dụng mô
hình với kỹ thuật tự động trên Visual Studio .NET. mô hình với kỹ thuật tự
động, được biết đến trong phiên bản trước của Visual Studio .NET như mô
hình có khả năng mở rộng, là một giao diện lập trình cho phép bạn truy cập tới
các thủ tục bên dưới có chạy môi trường phát triển được tích hợp, cho phép
hiệu chỉnh, thao tác và tự động hoá nó. Chẳng hạn, bạn có thể tạo các dự án và
các mục lục dự án một cách lập trình hay tự động hoá việc xây dựng một dự án
và các tiến trình triển khai dự án.
Chú ý: Khả năng mở rộng là khả năng cho phép phát triển và mở rộng
chức năng của IDE. Kỹ thuật tự động hoá nói đến mã được tạo ra theo thao tác
của user và các công cụ mà tự động hoá các tác vụ trong môi trường và chạy
IDE theo cách được lập trình.
Bạn có thể truy cập tới mô hình tự động hoá thông qua các macro trên

VS.NET (VSMacros), bằng cách tạo các mở rộng cho IDE dc gọi là Add-in,
hay bằng cách cài đặt một mục mới hoặc các Add Project wizard . Các Add-
in được biên dịch thành các app mà có thể thao tác với môi trường làm việc và
các tác vụ tự động hoá. Các Add-in có thể được triệu gọi theo một trong các
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 12

cách khác nhau, bao gồm Add-in Manager, toolbar command hay các nút, các
dòng lệnh, hay thông qua các sự kiện như khởi động IDE.
Trong phần hỗ trợ tới mô hình đối tượng chung được cung cấp bởi
Visual Studio .NET tới tất cả các ngôn ngữ lập trình , các công cụ và các gói
của nó, riêng với các ngôn ngữ lập trình trên Visual Studio .NET cũng có thể
cung cấp các bổ sung kỹ thuật riêng của chúng tới mô hình đối tượng tự động
hoá nhằm hỗ trợ các đặc điểm riêng biệt và các thành phần. Tất yếu bạn có thể
tạo một đối tượng Add-in mà làm việc rất tốt với bất kỳ ngôn ngữ nào trên
Visual Studio .NET, hay đối với ngôn ngữ nào được ghép vào để cung cấp
những điểm đặc biệt của một ngôn ngữ riêng biệt, chẳng hạn VB hay VC++.
II.1. Tạo một đối tượng Add-in
Trình Add-in Wizard cho phép tạo một đối tượng Add-in với đầy đủ các
khung chức năng mà có thể chạy ngay sau khi bạn hoàn tất nó. Sau khi trình
Add-in Wizard tạo một bộ khung cơ bản, bạn có thể thêm code tới nó và hiệu
chỉnh nó.
Chú ý: các đối tượng dc tạo trong VS.NET 2003 sẽ không làm việc
chính xác trong VS.NET 2002.
Bạn có thể tạo một macro để truy cập tới mô hình tự động hoá trên VS
như một sự lựa chọn cho việc tạo ra một đối tượng Add-in.
II.2. Các bước tạo đối tượng Add-in bằng Wizard

H ình 2.2: Tạo Add-in project bằng tr ình Visual Studio Add-in Wizard

 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 13

Trình Add-in Wizard cho phép bạn cung cấp một tên hiển thị và mô tả
cho đối tượng Add-in, cả hai xuất hiện trong hộp thoại Add-In Manager. Bạn
có thể chọn để cho trình Wizard tạo mã mà cho phép thêm một lệnh tới menu
Tools để load và triệu gọi đối tượng Add-in. Khi trình Wizard hoàn tất, bạn có
được môt project mới với một môđun đơn giản để cài đặt đối tượng Add-in.
Bạn cũng có được setup project để tạo ra file .msi mà có thể được dùng để cài
đặt đối tượng Add-in trên hệ thống khác (hay để cập nhật việc đăng ký của đối
tượng Add-in trên máy triển khai mà đôi khi là cần thiết đối với những gì mà
bạn làm với đối tượng Add-in của bạn).
Các bước thực hiện:
1. Tạo một VS Add-In project mới. Bạn có thể tìm thấy project này từ
mục Extensibility Projects bên dưới Other Projects
2. Chọn một ngôn ngữ từ khung Select a Programming Language.
Điều này cho phép bạn chọn một ngôn ngữ đối với đối tượng Add-in
được tạo ra.
3. Chọn một hoặc nhiều ứng dụng từ khung Select an Application
Host. Điều này cho phép bạn chọn các ứng dụng mà bạn cũng muốn
chạy đối tượng Add-in sau khi tạo.
4. Nhập vào tên và mô tả cho đối tượng Add-in của bạn trong khung
Enter a Name and Description. Tên này sẽ được hiển thị trong
danh sách Available Add-Ins của hộp thoại Add-In Manager và cho
các user biết được đối tượng Add-in làm gì, làm như thế nào, và hơn
thế nữa.
5. Trong khung Choose Add-in Options, hãy chỉ định những gì mà
bạn muốn đối tượng Add-in xuất hiện trong menu Tools, khi nào bạn
muốn đối tượng Add-in xuất hiện, và những gì mà đối tượng sẽ cho

phép đối với các đối tượng khác hoặc không. Điều này cho phép bạn
chỉ định các tuỳ chọn theo thói quen chắc chắn cho đối tượng Add-in
của bạn.
6. Trong khung Choosing Help About Information, hãy chỉ định
những gì bạn muốn về một hộp thông tin Help About, và nếu thế,
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 14

hãy chỉ định thông tin mà bạn muốn hiển thị. Điều này cho phép bạn
tạo một cửa sổ Help About chứa các thông tin về phiên bản, thông
tin hỗ trợ, thông tin bản quyền cho đối tượng Add-in của bạn và hơn
thế nữa. Sau 6 bước, các tuỳ chọn mà bạn đã chọn được hiển thị
trong một trang tổng kết.
7. Chọn Finish để tạo đối tượng Add-in.
Lúc này bạn có được một đối tượng Add-in với đầy đủ các chức năng,
nhưng còn rỗng.

II.3. Kết quả các lệnh của đối tượng Add-in
Khi bạn tạo ra một đối tượng Add-in sử dụng trình Add-in Wizard và
sau khi chạy nó, một thực thể khác của VS.NET khởi động, cho phép bạn kiểm
tra và bãy lỗi đối tượng tổng kết. Một hoặc nhiều lệnh cho đối tượng Add-in
được đặt trên một hoặc nhiều menu, chẳng hạn menu Tools. Sau khi bạn hoàn
tất bước bãy lỗi đối tượng Add-in và sau đó đóng lại thực thể thứ hai của
VS.NET, thông tin về lệnh sẽ được lưu lại.

II.4. Để phục hồi các lệnh của đối tượng Add-in tới menu
Các bước thực hiện:
1. Xây dựng setup project đã bởi trình wizard.
2. Đóng tất cả các thực thể của VS.NET.

3. Chạy file .msi từ setup project.
4. Khởi động lại VS.NET.
Từ bây giờ, khi chạy VS.NET, các lệnh của đối tượng Add-in sẽ được
hiển thị trên các menu. Trình setup project sẽ xây dựng và cài đặt nhanh hơn
nếu bạn xác định nó loại trừ môđun kết hợp có thể phân phối lại khi chạy trên
.NET Runtime.

 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 15

II.5. Điều khiển đối tượng Add-In với Add-In Manager
Add-In Manager là một công cụ để load và loại bỏ các đối tượng Add-in
trong IDE, và rất tiện để chỉ định các hành vi load lên của chúng. Add-In
Manager liệt kê tất cả các đối tượng được đăng ký hiện thời. Sử dụng Add-In
Manager, bạn có thể load hay unload một đối tượng Add-In ngay tức thì, hay
chỉ định một đối tượng Add-In khi môi trường phát triển khởi động hoặc khi nó
được khởi động thông qua một dòng lệnh, như với một thao tác tạo dựng.
Chỉ có các đối tượng được đăng ký xuất hiện trong danh sách các đối
tượng Add-In có hiệu lực.
Chú ý: Bạn có thể dùng phím TAB để di chuyển tới các dòng lệnh và
phần Startup, thay vì bạn phải sử dụng tổ hợp phím ALT + S và ALT + C để di
chuyển tới lui giữa các vùng chọn.

H ình 2.3: Hộp thoại Add-In Manager
Các bước thực hiện:
1. Chọn nó từ danh sách
2. Chọn vào check box trong dòng Startup, và click OK.
Nếu đối tượng Add-in có một giao diện (interface), thì nó sẽ xuất hiện,
hay đối tượng Add-in có thể xuất hiện như một nút tên toolbar hay một lệnh

trên menu tùy theo bạn chọn lựa, điều này phụ thuộc vào cách bạn lập trình cho
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 16

đối tượng Add-in. Nếu đối tượng Add-in không có một giao diện đồ họa (UI),
nó sẽ load lên một cách âm thầm và bắt đầu chạy.
Mẹo: Nếu bạn cố load một đối tượng mà không thể được định vị thì
trình Add-In Manager sẽ thoát bỏ đăng ký nó để nó không còn xuất hiện trong
danh sách nữa.

II.6. Để load một đối tượng Add-In ngay tức thì
Các bước thực hiện:
1. Chọn nó từ danh sách
2. Chọn vào check box trong dòng Startup, và click OK.

Nếu đối tượng Add-in có một giao diện (interface), thì nó sẽ xuất hiện,
hay đối tượng Add-in có thể xuất hiện như một nút tên toolbar hay một lệnh
trên menu tùy theo bạn chọn lựa, điều này phụ thuộc vào cách bạn lập trình cho
đối tượng Add-in. Nếu đối tượng Add-in không có một giao diện đồ họa (UI),
nó sẽ load lên một cách âm thầm và bắt đầu chạy.
Mẹo: Nếu bạn cố load một đối tượng mà không thể được định vị thì
trình Add-In Manager sẽ thoát bỏ đăng ký nó để nó không còn xuất hiện trong
danh sách nữa.

II.7. Chỉ định Add-in nạp lên khi môi trường khởi động
Các bước thực hiện:
1. Chọn đối tượng Add-in từ danh sách.
2. Chọn ô Load at startup trong dòng Startup.
Lần sau khi môi trường khởi động, thì đối tượng Add-in sẽ load lên nếu

nó có hiệu lực.

 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 17

II.8. Triệu gọi các đối tượng Add-In thông qua dòng lệnh Devenv
Thông thường khi sử dụng trình Add-In Manager để khởi động các đối
tượng Add-in, bạn cũng có thể gọi một đối tượng Add-in bằng cách dùng dòng
lệnh Devenv. Để làm điều này, hãy sử dụng khoá chuyển đổi /command với
cấu trúc như sau:
devenv /command <command>.<name>
Ở đây, command.name là tên lệnh trong đối tượng Add-in của bạn.

II.9. Đăng ký đối tượng Add-In
Một khi một đối tượng Add-In được tạo ra, nó phải được đăng ký như là
một thành phần COM với các bản Microsoft Windows. Trình Add-in Wizard
sẽ tự động thực hiện việc đăng ký này cho bạn, nhưng nếu bạn không sử dụng
trình Add-in Wizard để tạo ra đối Add-in, bạn phải làm điều này bằng tay theo
các bước sau:
1. Mở cửa sổ dòng lệnh.
2. Nếu bạn đang sử dụng VB.NET hay VC#.NET, hãy đánh
regasm <name>.dll
ở đây, <name> là tên của đối tượng Add-In.
Nếu bạn sử dụng VC++.NET, hãy dùng regsvr32
Sau khi một đối tượng Add-in được đăng ký, nó được nhận ra bởi môi
trường triển khai được tích hợp (IDE). Để liệt kê nó trong hộp thoại Add-In
Manager, bạn phải tạo ra các khoá đăng ký cho nó, như dòng bên dưới.
Trong vài trường hợp, sẽ là có ích để biết được những gì mà các khoá đăng ký
được giả tạo bởi trình Add-In Wizard. Trình Add-In Wizard tạo một mã

chương trình thống nhất (progID) cho mỗi đối tượng Add-in và chèn nó vào
trong phần đăng ký. Một progID bao gồm tên của dự án và theo sau là tên của
môđun lớp, như MyProj.MyClass.
Chú ý rằng HKEY_CURRENT_USER được dùng để làm cho đối tượng
Add-in có hiệu lực chỉ đối với user hiện thời. Để làm cho nó có hiệu lực đối với
tất cả các user, hãy thay bằng HKEY_LOCAL_MACHINE. Mỗi ProgID chứa
đựng cặp tên/giá trị sau:
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 18

 FriendlyName – tuỳ chọn. Là tên xuất hiện trong danh sách các đối
tượng Add-In có hiệu lực của trình Add-In Manager. Giá trị này là
tuỳ chọn nhưng nó có yêu cầu sử dụng cao.
 Description – tuỳ chọn. Là một chuỗi được hiễn thị bên dưới của
hợp thoại Add-in Manager khi đối tượng Add-in được thêm vào.
Giá trị này là tuỳ chọn nhưng nó có yêu cầu sử dụng cao.
 LoadBehavior – tuỳ chọn. Một trường các bít kiểu DWORD với các
cờ theo sau (đối với Visual Studio, Visual Basic và VSA). Các giá trị
này là tuỳ chọn nhưng nó có yêu cầu sử dụng cao.
Cờ hiệu
Giá trị
Mô tả
ID_UNLOADED
0
Đối tượng Add-in không được load
ngay lập tức.
ID_STARTUP
1
Đối tượng Add-in nên được load khi

IDE khởi động
ID_COMMAND_LINE
4
Đối tượng Add-in nên được load khi
devenv được triệu gọi từ dòng lệnh
với một thành phần chuyển khoá.
Bảng 2.5: Các tuỳ chọn cho load đối tượng Add-in

 CommandPreload – tuỳ chọn. Là một giá trị dạng Boolean cho biết
khi nào là lần đầu tiên mà Visual Studio đã khởi động từ khi đối
tượng Add-in được đăng ký. Chẳng hạn, cờ này cho phép bạn chỉ
định mỗi khi một đối tượng Add-in được load để đặt các lệnh trong
các menu, và ngay sau đó nó không được load cho đến khi một user
cuối cùng sử dụng một trong các lệnh này, mà sau đó load lên theo
yêu cầu đối tượng Add-in trong tất cả các thực thể kế tiếp của IDE.
Giá trị
Mô tả
0
Cho biết đối tượng Add-in đã cài đặt các lệnh của nó.
1
Cho biết đối tượng Add-in vẫn cần cài đặt các lệnh
của nó.
Bảng 2.6: Ý ngh ĩa của cờ CommandPreload
 Luận văn tốt nghiệp Chương 2

Nguyễn Duy Hoà V õ Đức Hiền Trang 19

Bạn có thể đánh dấu phương thức OnConnection mà bạn cài đặt để biết
với loại kết nối là ext_cm_UISetup. Nếu thế, bạn có thể thực thi
 CommandLineSafe – tuỳ chọn. Cho biết dù đối tượng Add-in có

được thiết kế hay không để tránh hiển thị một giao diện người dùng
(UI) khi được triệu gọi bởi dòng lệnh devenv.
 SatelliteDllPath và SatelliteDllName – tuỳ chọn. Các mục tên và
mô tả trong phần đăng ký có thể được định vị. Nếu giá trị của chúng
bắt đầu với dấu # và theo sau đó là một số nguyên có thể chuyển
kiểu, thì giá trị dạng chuỗi được hiển thị trong hợp thoại Add-in
Manager là giá trị của mã nguồn được chỉ định bên trong file vệ tinh
trung tâm DLL. File vệ tinh trung tâm DLL này được xác định bởi
một hoặc hai mục đăng ký có giá trị tuỳ chọn sau :
o SatelliteDllPath – Nếu được hiển thị, giá trị này là một tên
đường dẫn đầy đủ dạng chuổi chỉ tới một thư mục, kết thúc
bởi một dấu (\). Trình Add-in Manager tìm kiếm file Dll vệ
tinh trung tâm trong khu vực bởi sự trùng khớp đường dẫn
của giá trị
o SatelliteDllPath, mã khu vực của máy được cài đặt, dấu (\),
và giá trị SatelliteDllName.
SatelliteDllName – Là giá trị dạng chuỗi chứa tên file. Thư mục
chứa file hoặc là thư mục chứa các thư viện liên kết động (DLL),
hoặc là thư mục được tính trước được mô tả cho SatelliteDllPath.

II.10. Các sự kiện chính trong Add-In project
II.10.1. Phương thức OnConnect
Xuất hiện khi một đối tượng Add-In được load vào môi trường.
void OnConnection(
object Application,
ext_ConnectMode ConnectMode,
object AddInInst,
object[] custom );

×