KIẾN THỨC MÔI TRƯỜNG PHÁT TRIỂN VÀ ADD-IN
Môi trường phát triển DTE
Đố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 .
24 trang |
Chia sẻ: huyen82 | Lượt xem: 1696 | Lượt tải: 0
Tóm tắt tài liệu Xây dựng hệ thống hỗ trợ tra cứu lỗi lập trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở 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.
Hình 2.1: Mô hình đối tượng tự động trên Visual Studio .NET
Để 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
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:
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.
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.
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("VisualStudio.DTE.7.1", "");
-or-
EnvDTE.DTE dte;
DTE = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("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.
Những đối tượng chính trong project
Đố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.
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 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
Đố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ạ:
Public WithEvents CommandEvents As
EnvDTE.CommandEvents
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 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.
Đố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.
Đố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 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 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
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 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++.
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.
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
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:
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
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.
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.
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.
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.
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ế, 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.
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.
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.
Để 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:
Xây dựng setup project đã bởi trình wizard.
Đóng tất cả các thực thể của VS.NET.
Chạy file .msi từ setup project.
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.
Đ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:
Chọn nó từ danh sách
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.
Để load một đối tượng Add-In ngay tức thì
Các bước thực hiện:
Chọn nó từ danh sách
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.
Chỉ định Add-in nạp lên khi môi trường khởi động
Các bước thực hiện:
Chọn đối tượng Add-in từ danh sách.
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.
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 .
Ở đây, command.name là tên lệnh trong đối tượng Add-in của bạn.
Đă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:
Mở cửa sổ dòng lệnh.
Nếu bạn đang sử dụng VB.NET hay VC#.NET, hãy đánh regasm .dll ở đây, 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:
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
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 :
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ị
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.
Các sự kiện chính trong Add-In project
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 );
Tham số:
Application: đối tượng có khả năng mở rộng ở mức cao
ConnectMode: Một hằng số ext_cm chỉ định các đối tượng Add-In được nạp.
AddInInst: một đối tượng Add-In đại diện cho một thực thể của Add-In
Custom: Một mảng các biến mà bạn có thể dùng để cung cấp cho dữ liệu bổ sung.
Nhận xét:
OnConnect là một phương thức mà khi giao diện dạng host của nó (IDTExtensibility2) được cài đặt, nó hành động như một sự kiện xuất hiện khi một đối tượng Add-In được load. Điều này xuất hiện khi:
Một user load đối tượng Add-In thông qua hộp thoại Add-In Manager.
Một đối tượng Add-In được đánh dấu bắt đầu khi ứng dụng chủ của nó load
Đối tượng Connect của một đối tượng Add-In tương ứng được thiết lập True.
Minh hoạ:
Chú ý đoạn code này chỉ làm việc trong một Add-In project, không làm việc trong các macro.
Imports Microsoft.Office.Core
imports Extensibility
imports System.Runtime.InteropServices
Imports EnvDTE
<GuidAttribute("B25D9733-A1B2-420D-8F6B-478E2B051C83"),
ProgIdAttribute("MyAddin1.Connect")> _
Public Class Connect
Implements Extensibility.IDTExtensibility2
Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn
Public Sub OnConnection(ByVal application As Object, ByVal
connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object,
ByRef custom As System.Array) Implements
Extensibility.IDTExtensibility2.OnConnection
applicationObject = CType(application, EnvDTE.DTE)
addInInstance = CType(addInInst, EnvDTE.AddIn)
End Sub
End Class
Phương thức OnStartupComplete
Xuất hiện khi môi trường đã hoàn tất quá trình khởi động.
void OnStartupComplete( object[] custom );
Tham số:
custom: mảng các biến mà bạn có thể dùng để cung cấp dữ liệu bổ sung.
Ghi chú:
OnStartupComplete là một phương thức mà khi giao diện chủ của nó (IDTExtensibility2) được cài đặt, nó hoạt động như một sự kiện xuất hiện khi môi trường đã kết thúc quá trình khởi động.
Sự kiện OnStartupComplete xuất hiện khi ứng dụng chủ của nó hoàn tất tiến trình khởi động của nó, trong trường hợp mà đối tượng Add-In load tại lúc môi trường khởi động. Nếu đối tượng Add-In không được load lên lúc ứng dụng load, thì sự kiện OnStartupComplete không xuất hiện, ngay cả khi user load đối tượng Add-In thông qua hộp thoại Add-In Manager. Khi sự kiện này xuất hiện, nó xuất hiện sau sự kiện OnConnection.
Bạn có thể dùng sự kiện OnStartupComplete để chạy đoạn code mà tương tác với ứng dụng, nhưng không nên chạy cho đến khi ứng dụng kết thúc quá trình load. Chẳng hạn, nếu bạn muốn hiển thị một form mà cho user một chọn các tài liệu để tạo khi chúng bắt đầu ứng dụng, bạn có thể đặt đoạn mã đó bên trong thủ tục sự kiện OnStartupComplete.
Minh hoạ:
Imports Microsoft.Office.Core
imports Extensibility
imports System.Runtime.InteropServices
Imports EnvDTE
_
Public Class Connect
Implements Extensibility.IDTExtensibility2
Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn
Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
Msgbox("IDE startup complete event occuring.")
End Sub
End Class
Phương thức OnAddInsUpdate
Xuất hiện khi một đối tượng Add-in được load hay unload trong môi trường.
void OnAddInsUpdate(
object[] custom
);
Tham số:
custom: Một mảng các biến mà bạn có thể dùng để cung cấp cho dữ liệu bổ sung.
Chú ý:
OnAddInsUpdate là một phương thức mà khi giao diện chủ của nó được cài đặt, nó hoạt động khi một sự kiện tạo ra một thay đổi tới danh sách các đối tượng Add-In trong hộp thoại Add-In Manager, như khi một đối tượng được load hay unload.
Sự kiện OnAddInsUpdate xuất hiện trong vài trường hợp khác của các đối tượng Add-In. Chẳng hạn, nếu cả hai đối tượng Add-In A và B hiện tại cùng được load, và sau đó thì đối tượng Add-In C được load, thì sự kiện OnAddInsUpdate xuất hiện trong các đối tượng A và B. Nếu C bị unload thì sự kiện OnAddInsUpdate lại xuất hiện trong A và B.
Minh hoạ:
Imports Microsoft.Office.Core
imports Extensibility
imports System.Runtime.InteropServices
Imports EnvDTE
_
Public Class Connect
Implements Extensibility.IDTExtensibility2
Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn
Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
Msgbox("Add-In update event occuring.")
End Sub
End Class
Phương thức OnBeginShutdown
Xuất hiện khi môi trường đang shut down.
void OnBeginShutdown(
object[] custom
);
Tham số:
custom: Một mảng các biến mà bạn có thể dùng để cung cấp cho dữ liệu bổ sung.
Chú ý:
OnBeginShutdown là một phương thức mà khi giao diện chủ của nó được cài đặt, nó hoạt động như một sự kiện xuất hiện khi môi trường đang shut down.
Sự kiện OnBeginShutdown xuất hiện khi một ứng dụng chủ bắt đầu tiến trình shutdown của nó; nghĩa là khi một ứng dụng đóng trong khi đối tượng Add-In vẫn được load. Nếu đối tượng Add-in hiện tại không được load khi ứng dụng đóng, thì sự kiện OnBeginShutdown không xuất hiện. Khi điều này xảy ra thì sự kiện này xuất hiện trước sự kiện OnDisConnection.
Ta cũng có thể dùng sự kiện OnBeginShutdown để chạy khi user đóng một ứng dụng. Chẳng hạn, ta có thể chạy đoạn code mà lưu lại dữ liệu của form tới một file.
Sự kiện OnBeginShutdown cũng có thể xuất hiện nhiều hơn một lần. Nếu một đối tượng quản lý sự kiện thoát khỏi thao tác shutdown môi trường, thì ở lần sau khi môi trường bắt đầu shutdown, sự kiện OnBeginShutdown sẽ lại xuất hiện.
Minh hoạ:
Imports Microsoft.Office.Core
imports Extensibility
imports System.Runtime.InteropServices
Imports EnvDTE
_
Public Class Connect
Implements Extensibility.IDTExtensibility2
Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn
Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
Msgbox("Shutdown event occuring.")
End Sub
End Class
Phương thức OnDisconnection
Xuất hiện khi một Add-in được load từ môi trường.
void OnDisconnection(
ext_DisconnectMode RemoveMode,
object[] custom
);
Tham số
RemoveMode: là một hằng số ext_dm chỉ định cách đối tượng Add-in được load
custom: một mảng các kiểu giá trị của biến mà cung cấp dự liệu bổ sung. Điều này không được dùng bởi Visual Studio .NET.
Ghi chú:
OnDisconnection là một phương thức mà khi giao diện chủ của nó được cài đặt, nó hoạt động như một sự kiện xuất hiện khi một đối tượng Add-in được load.
Một đối tượng Add-in có thể bị unload trong một vài cách sau:
Xoá check box tiếp theo tới đối tượng Add-in trong hộp thoại Add-In Manager.
Đóng ứng dụng chủ của nó. Nếu một đối tượng Add-In được load và ứng dụng của nó đóng, thì sau đó đối tượng Add-In bị unload. Nếu thuộc tính loadBehavior của đối tượng Add-In được thiết lập lúc Startup, thì nó được load lại khi một ứng dụng bắt đầu trở lại.
Thuộc tính Connect của đối tượng Add-In tương ứng được thiết lập False.
Minh hoạ:
Imports Microsoft.Office.Core
imports Extensibility
imports System.Runtime.InteropServices
Imports EnvDTE
_
Public Class Connect
Implements Extensibility.IDTExtensibility2
Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn
Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
Msgbox("Add-In disconnection event occuring.")
End Sub
End Class
._.