HOW TO:設定免註冊啟動的 .NET 架構元件
更新:2007 年 11 月
.NET 架構元件的免註冊啟動只比 COM 元件的免註冊啟動稍微複雜一些。此設定需要兩種資訊清單:
COM 應用程式必須擁有 Win32 樣式應用程式資訊清單來辨識 Managed 元件
.NET 架構元件必須擁有在執行階段時所需之啟動資訊的元件資訊清單
這個主題說明如何將應用程式資訊清單與應用程式關聯在一起;並在組件中嵌入元件資訊清單。
若要建立應用程式資訊清單
使用 XML 編輯器,建立 (或修改) COM 應用程式所擁有的應用程式資訊清單,來與一或多個 Managed 元件互通。
在檔案開頭插入下列標準標頭:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
如需資訊清單項目和其屬性的詳細資訊,請在 MSDN Library 中搜尋 "Application Manifests Reference"。
識別資訊清單的擁有人。在下列範例中,myComApp 版本 1 擁有資訊清單檔。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" />
識別相依組件。在下列範例中,myComApp 依存在 myManagedComp 上。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="8275b28176rcbbef" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="myOrganization.myDivision.myManagedComp" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="8275b28176rcbbef" language="*" /> </dependentAssembly> </dependency> </assembly>
儲存和命名資訊清單檔。應用程式資訊清單的名稱為組件可執行檔的名稱再加上 .manifest 副檔名於其後。例如,myComApp.exe 的應用程式資訊清單檔名稱為 myComApp.exe.manifest。
您可以在與 COM 應用程式相同的目錄之下,安裝應用程式資訊清單。要不然,您可以將它當做資源加入應用程式的 .exe 檔中。如需詳細資訊,請在 MSDN Library 中搜尋 "Side-by-side Assemblies"。
若要建立元件資訊清單
使用 XML 編輯器,建立元件資訊清單來描述 Managed 組件。
在檔案開頭插入下列標準標頭:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
識別檔案的擁有人。在應用程式資訊清單檔中,<dependentAssembly> 項目的 <assemblyIdentity> 項目,必須與元件資訊清單中的項目相符。在下列範例中,myManagedComp 版本 1.2.3.4 擁有資訊清單檔。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" /> publicKeyToken="8275b28176rcbbef"
識別組件中的每一個類別。在 Managed 組件中,使用 <clrClass> 項目來唯一識別每一個類別。此項目是 <assembly> 項目的子項目,下表說明其所擁有的屬性。
屬性
說明
必要項
clsid
指定啟動類別的識別項。
是
description
告知使用者關於元件資訊的字串。預設為空字串。
否
name
表示 Managed 類別的字串。
是
progid
用於晚期繫結啟動的識別項。
否
threadingModel
COM 執行緒模型。預設值為 "Both"。
否
runtimeVersion
此屬性被忽略。如果執行階段還未載入,在啟動類別前會先載入最新的版本。否則,會使用目前載入的版本。
否
tlbid
包含關於類別型別資訊的型別程式庫識別項。
否
所有的屬性標籤都區分大小寫。藉由使用 OLE/COM ObjectViewer (Oleview.exe) 來檢視匯出的型別程式庫組件,您可以獲得 CLSID、ProgID、執行緒模型和執行階段版本。
下列元件資訊清單以兩種方式來辨識單一類別。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" /> publicKeyToken="8275b28176rcbbef" <clrClass clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}" progid="myManagedComp.testClass1" threadingModel="Both" name="myManagedComp.testClass1" runtimeVersion="v1.0.3705"> </clrClass> <clrClass clsid="{367221D6-3559-3328-ABD3-45B6825F9732}" progid="myManagedComp.testClass2" threadingModel="Both" name="myManagedComp.testClass2" runtimeVersion="v1.0.3705"> </clrClass> <file name="MyManagedComp.dll"> </file> </assembly>
儲存和命名資訊清單檔。元件資訊清單的名稱為組件程式庫的名稱,後面再加上 .manifest 副檔名。例如,myManagedComp.dll 的元件資訊清單名稱為 myManagedComp.manifest。
您必須將元件資訊清單當做資源嵌入組件中。
若要嵌入元件資訊清單至 Managed 組件中
建立包含下列陳述式的資源指令碼 (Script):
RT_MANIFEST 1 myManagedComp.manifest
在此陳述式中,myManagedComp.manifest 是嵌入的元件資訊清單名稱。這個範例的指令碼檔案名稱為 myresource.rc。
使用 Microsoft Windows Resource Compiler (Rc.exe) 來編譯該指令碼。請在命令提示字元中輸入下列命令:
rc myresource.rc
Rc.exe 會產生 myresource.res 資源檔。
再次編譯組件的資源檔,並使用 /win32res 選項指定資源檔:
/win32res:myresource.res
myresource.res 會再一次成為含有內嵌資源之資源檔的名稱。