使用 Visual Studio Tools for Office 可以建立兩種類型的解決方案:文件層級自訂項和應用程式層級增益集。它們具有以下配置:
使用Visual Studio Tools for Office 開發的應用程式是基於CLR的託管應用程式,而Office 是基於COM 組件的非託管應用程式.所以在此覺得有必要複習一下託管應用程式在CLR中的執行過程.就舉一個最簡單的例子吧,代碼如下:
Code
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello Word");
}
}
為執行的流程圖
簡單說說執行過程,VS.NET IDE 調用CSC.exe編譯器產生EXE程式集.以32位作業系統為例.當執行EXE程式集時,首行建立一個32位的進程,這個進程中的主線程會去調用MSCorEE.dll組件來初始化CLR,MSCorEE.dll位於C:\WINDOWS\system32目錄下,用來判斷一台機器是否安裝.NET Framework.初如化的CLR會去載入EXE程式集,並從函數進入點Main()開始執行程式,CLR為Main方法中調用的Console類型分配一個單獨的內部結構,並為每個該類型的每個方法付上地址,以便該方法調用的時候使用,當首次調用WriteLine()方法時,會去調用JIT編譯器,JIT編譯器從中繼資料中尋找WriteLine方法,把它編譯成本地的CPU代碼.並修改儲存在Console類型中WriteLine的指標,這樣子第二次開始調用WriteLine方法可直接執行本地的CPU代碼.另外對中繼資料有點補充,中繼資料有二張表,一張是類型表,如用來核對編譯時間的參數類型.另一個是成員表.說明該託管模組有哪些成員.託管應用程式的執行過程就介紹到這邊,下面介紹一下Office應用程式的執行過程.
VSTO建立的兩種解決方案,不管是文件層級自訂項,還是應用程式層級增益集,部署後都是由office文檔和程式集(dll檔案)兩個部份組成.當開啟具體Managed 程式碼office文檔時,VSTO載入程式將啟動VSTO 運行庫(Runtime),建立應用程式定義域並將該應用程式定義域的原則設定為不信任“我的電腦”地區.接著VSTO 運行庫初始化公用語言運行庫(CLR)到應用程式定義域中.被初始化的CLR載入與文檔對應的託管程式集.託管程式通過主要 Interop 組件PIA(適配器)來捕獲文檔中發生的事件.接下去具體談談Office文檔調用程式集的過程.
1.文件層級自訂項的體繫結構
1).2007 Microsoft Office system 的自訂項體繫結構
不管是文件層級自訂項,還是應用程式層級增益集,都存在著指標,用來儲存關鏈的託管程式集的地址.在Office2007文檔提供了_AssemblyLocation 屬性,用來儲存部署資訊清單.當使用者開啟屬於 2007 Microsoft Office 自訂項的文檔時,應用程式從 _AssemblyLocation讀取部署資訊清單.接著從部署資訊清單中讀取應用程式資訊清單.來尋找最新的文件層級自訂項程式集.自定項程式集過主要 Interop 組件PIA與Office COM組件進行通訊.
2).Microsoft Office 2003 的自訂項體繫結構
在Office2003文檔級自義定項中,不同的是用運行時儲存控制項來儲存應用程式資訊清單.當使用者開啟屬於 2003 Microsoft Office 自訂項的文檔時,應用程式從運行時儲存控制項中讀取應用程式資訊清單.應用程式資訊清單載入可選的部署資訊清單來尋找最新的文檔級自義定項程式集.自定項程式集過主要 Interop 組件PIA與Office COM組件進行通訊.
在此有必要說說VSTO Runtime 3.0和VSTO Runtime 2.0載入組件是不同的.在VSTO Runtime 3.0,應用程式首先載入VSTOEE.dll組件,接著載入VSTOLoader.dll組件來初始化公用語言運行庫.而在VSTO Runtime 2.0隻提供AddinLoader.dll來初始化公用語言運行庫.
2.應用程式層級增益集的體繫結構
1).2007 Microsoft Office system 的增益集體繫結構
與文件層級自訂項程式相比,應用程式增益集是通過註冊來發現應用程式的.當使用者開啟屬於 2007 Microsoft Office 應用程式增益集文檔時.應用程式讀取登錄機碼,接著讀取部署資訊清單.從部署資訊清單中讀取應用程式資訊清單來尋找最新的增益集程式集.增益集程式集通過主要 Interop 組件(PIA)與Office COM組件通訊.
2).Microsoft Office 2003 的增益集體繫結構
與Microsoft Office 2007 的增益集相比.載入增益集程式集的過程基本上是一樣的.有一點不同的是應用程式資訊清單載入可選擇的部署資訊清單來尋找最新的增益集程式集,增益集程式集通過主要 Interop 組件(PIA)與Office COM組件通訊.