組件連結器 (Al.exe)

更新:2007 年 11 月

組件連結器 (Assembly Linker) 會從一個或多個模組或資源檔中產生一個包含組件資訊清單 (Assembly Manifest) 的檔案。模組是 Microsoft Intermediate Language (MSIL) 檔案,不含組件資訊清單。

注意事項:

為避免受 Windows Vista 電腦上的虛擬化所限,您的組件必須包含 win32 資訊清單,其中指定要求的執行層級。當直接從命令列使用 al.exe 時,您可以將資訊清單嵌入 win32 資源檔,或者使用 mt.exe 在建置程序的稍後階段附加資訊清單。在 Visual Studio 2008 中,C# 和 Visual Basic 編譯器都會自動將 win32 資訊清單嵌入到組件。如需詳細資訊,請參閱/win32manifest (匯入自訂 Win32 資訊清單檔) (C# 編譯器選項)

al sources options

參數

您可以指定一個或多個下列 sources。

來源

描述

file[,target]

將 file (模組) 的內容複製到 target 所指定的檔案名稱中。複製完之後,Al.exe 會將 target 編譯成組件。

/embed[resource]:file[,name[,private]]

將 file 所指定的資源嵌入包含組件資訊清單的影像中;Al.exe 會將 file 的內容複製到可移植執行檔 (PE) 影像中。

name 參數是資源的內部識別項。依照預設,組件中的資源為公用 (其他組件也可看見)。指定 private 會使其他組件無法看見資源。

例如,如果 file 是由資源檔產生器 (Resgen.exe) 或是在開發環境中建立的 .NET Framework 資源檔,即可使用 System.Resources 中的成員加以存取。如需詳細資訊,請參閱ResourceManager。至於其他所有資源,請使用 Assembly 中的 GetManifestResource* 方法在執行階段存取資源。

如果只將資源檔傳遞至 Al.exe,輸出檔是附屬資源組件。

/link[resource]:file[,name[,target[,private]]]

將資源檔連結至組件。file 所指定的資源會變成組件的一部分,而且不複製檔案。file 參數可以是任何檔案格式。例如,您可以指定原生的 DLL 做為 file 參數。這會產生組件的原生 DLL 部分,以便安裝到全域組件快取中,並從組件的 Managed 程式碼存取。您也可以利用 /linkresource 編譯器選項將資源檔連結至組件。如需詳細資訊,請參閱 /linkresource (連結到 .NET Framework 資源) (C# 編譯器選項)

name 參數是資源的內部識別項。target 參數會指定 Al.exe 複製 file 所用的路徑和檔案名稱。複製完之後,Al.exe 會將 target 編譯成組件。依照預設,組件中的資源為公用 (其他組件也可看見)。指定 private 會使其他組件無法看見資源。

例如,如果 file 是由資源檔產生器 (Resgen.exe) 或是在開發環境中建立的 .NET Framework 資源檔,可以使用 System.Resources 命名空間中的成員來存取。如需詳細資訊,請參閱ResourceManager。至於其他所有資源,請使用 Assembly 類別中的 GetManifestResource* 方法在執行階段存取資源。

如果只將資源檔傳遞至 Al.exe,輸出檔是附屬資源組件。

您可以指定下列 options;您必須指定 /out

選項

描述

/algid:id

指定雜湊多檔案組件中所有檔案 (除了包含組件資訊清單的檔案之外) 的演算法。預設的演算法為 CALG_SHA1。如需其他的演算法,請參閱 Platform SDK 文件中的 ALG_ID。對於第一版的 .NET Framework 而言,只有 CALG_SHA1 和 CALG_MD5 為有效。

雜湊值 (Hash Value) 是儲存在組件資訊清單的檔案表格中。在安裝和載入期間,會根據雜湊來檢查組件中的檔案。

您也可以在任何模組的原始程式碼中,將這個選項指定為自訂屬性 (Attribute)(AssemblyAlgorithmIdAttribute)。

/base[address]:addr

指定在執行期間將 DLL 載入使用者電腦上的位址。如果指定 DLL 的基底位址 (Base Address),而不是由作業系統重新找出處理空間中的 DLL,應用程式載入的速度會較快。

/bugreport:filename

建立包含報告錯誤所需資訊的檔案 (filename)。

/comp[any]:text

為組件中的 [公司] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res,text 在 Microsoft Windows 檔案總管中會顯示為檔案的 Company 屬性。如果指定 /win32res,指定資源檔中的公司資訊在 Windows 檔案總管中會顯示為 Company 屬性。

如果文字為空字串 (""),Win32 Company 資源會顯示為一個空格。

如果指定 /win32res/company 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyCompanyAttribute)。

/config[uration]:text

為組件中的 [組態] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果文字為空字串,Win32 Configuration 資源會顯示為一個空格。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyConfigurationAttribute)。

/copy[right]:text

為組件中的 [著作權] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res/copyright 在 Windows 檔案總管中會顯示為 Win32 Copyright 資源。

如果文字為空字串,Win32 Copyright 資源會顯示為一個空格。

如果指定 /win32res/copyright 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyCopyrightAttribute)。

/c[ulture]:text

指定與組件關聯的文化特性 (Culture) 字串。文化特性的有效值為在標題為<Tags for the Identification of Languages>的 Internet Requests for Comments (RFC) 1766 年文件中定義的值。

如果 text 包含空白,請將字串置於雙引號內 (" ")。沒有預設的文化特性字串。這個字串可使用反映進行檢視。

如需有效 text 字串的詳細資訊,請參閱 CultureInfo

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyCultureAttribute)。

/delay[sign][+|-]

指定組件為完整或部分簽署。如果要完整簽署的組件,請使用 /delaysign-。如果您只想將公開金鑰包含在組件中,請使用 /delaysign+

當您要求完整簽署的組件時,Al.exe 會雜湊包含資訊清單 (組件中繼資料) 的檔案,並使用私密金鑰簽署雜湊。產生的數位簽章儲存在包含資訊清單的檔案中。當組件延遲簽署時,Al.exe 不會計算和儲存簽署,只會在檔案中保留空間,以便稍後再加入簽署。

預設值為 /delaysign-

/delaysign 選項必須與 /keyfile/keyname 一起使用,否則不會發生任何作用。

例如,使用 /delaysign+ 可讓測試器將組件置於全域快取區中。測試過後,即可透過將私密金鑰包含組件內,為組件完整簽署。

注意事項:

在使用全域組件快取工具 (Gacutil.exe) 將延遲簽署的組件置於全域快取區之前,請先使用強式名稱工具 (Sn.exe) 註冊此組件,以略過驗證。例如 Sn.exe –Vr delaySignedAssembly。請只在開發時使用此選項。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyDelaySignAttribute)。

/descr[iption]:text

為組件中的 Description 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res/description 在 Windows 檔案總管中會顯示為 Win32 Comments 資源。

如果文字為空字串,Win32 Comments 資源會顯示為一個空格。

如果指定 /win32res/description 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (Description)。

/e[vidence]:file

使用 Security.Evidence 的資源名稱,將 file 嵌入組件中。

您不能將 Security.Evidence 用於標準資源。

/fileversion:version

為組件中的 [檔案版本] 欄位指定字串。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res,會將 /fileversion 當成 Win32 File Version 資源。如果不指定 /fileversion,會以 Win32 Assembly Version 資源填入 (Populate) Win32 File Version 資源中。

如果指定 /win32res/fileversion 不會影響 Win32 資源。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyFileVersionAttribute)。

/flags:flags

為組件中的 Flags 欄位指定值。flags 的可能值如下:

0x0000

組件並存相容。

0x0010

如果組件在相同的應用程式定義域中執行,它無法與其他版本一起執行。

0x0020

如果組件在相同的處理序中執行,它無法與其他版本一起執行。

0x0030

如果組件在相同的電腦上執行,它無法與其他版本一起執行。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyFlagsAttribute)。

/fullpaths

使 Al.exe 在錯誤訊息中所報告的任何檔案中使用絕對路徑。

/help

顯示工具的命令語法和選項。

/keyf[ile]:filename

指定含有金鑰組 (Key Pair) 的檔案 (filename),或是只要指定公開金鑰,來為組件簽署。編譯器會將公開金鑰插入組件資訊清單中,然後使用私密金鑰簽署最後的組件。如需產生金鑰檔和將金鑰組安裝在金鑰容器中的詳細資訊,請參閱強式名稱工具 (Sn.exe)

如果您使用延遲簽署,這個檔案通常會包含公開金鑰,而非私密金鑰。

(金鑰組的) 公開金鑰資訊會出現在組件的 [.publickey] 欄位。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyKeyFileAttribute)。

如果 /keyfile/keyname 都在相同的編譯中指定 (不是由命令列選項就是由自訂屬性),Al.exe 會先嘗試使用 /keyname 指定的容器。如果這個動作成功,那麼組件就會使用金鑰容器中的資訊加以簽署。如果 Al.exe 找不到金鑰容器,它會嘗試使用 /keyfile 指定的檔案。如果這個動作成功,組件就會使用金鑰檔案中的資訊加以簽章,金鑰資訊則會安裝在金鑰容器 (類似於 Sn.exe 中的 -i 選項),這樣在下次編譯時,/keyname 選項就會是有效的。

/keyn[ame]:text

指定保留金鑰組的容器。這將會藉由將公開金鑰插入組件資訊清單中來簽署組件 (為它指定強式名稱)。然後 Al.exe 將會使用私密金鑰簽署最後的組件。

請使用 Sn.exe 產生金鑰組。

金鑰資訊會顯示在組件的 [.publickey] 欄位中。

如果 text 包含空白字元,請將它放在雙引號 (" ") 中。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyKeyNameAttribute)。

/main:method

指定將模組轉換成可執行檔時,用來做為進入點 (Entry Point) 的方法完整名稱 (class.method)。

/nologo

隱藏叫用 Al.exe 時顯示在命令列的橫幅或標誌。

/out:filename

指定 Al.exe 產生的檔案名稱。這是必要的選項。

/platform:text

限制這個程式碼可以在哪些平台執行︰x86、Itanium、x64 或 anycpu (預設值)。

/prod[uct]:text

為組件中的 [產品] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res/product 在 Windows 檔案總管中會顯示為 Win32 Product Name 資源。

如果文字為空字串,Win32 Product Name 資源會顯示為一個空格。

如果指定 /win32res/product 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyProductAttribute)。

/productv[ersion]:text

為組件中的 [產品版本] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res,會將 /productversion 當成 Win32 Product Version 資源。如果不指定 /productversion,會以 Win32 Product Version 資源填入 Win32 File Version 資源中。

如果指定 /win32res/productversion 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyInformationalVersionAttribute)。

/t[arget]:lib[rary] | exe | win[exe]

指定輸出檔的檔案格式:lib[rary] (程式碼程式庫)、exe (主控台應用程式) 或 win[exe] (Windows 架構應用程式)。預設值為 lib[rary]。

/template:filename

指定要從其中繼承所有組件中繼資料 (文化特性 (Culture) 欄位除外) 的組件 (filename)。

使用 /template 建立的組件將為附屬組件。

/title:text

為組件中的 [標題] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res/title 在 Windows 檔案總管中會顯示為 Win32 Description 資源,Shell 會將它當成應用程式的易記名稱。對於有多個支援應用程式的檔案類型而言,也會顯示在快速鍵功能表的 [開啟方式] 子功能表中。

如果文字為空字串,Win32 Description 資源會顯示為一個空格。

如果指定 /win32res/title 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyTitleAttribute)。

/trade[mark]:text

為組件中的 [商標] 欄位指定字串。如果 text 包含空白,請將字串置於雙引號內 (" ")。這個字串是組件的自訂屬性,可使用反映進行檢視。

如果不指定 /win32res/trademark 在 Windows 檔案總管中會顯示為 Win32 Trademark 資源。

如果文字為空字串,Win32 Trademark 資源會顯示為一個空格。

如果指定 /win32res/trademark 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyTrademarkAttribute)。

/v[ersion]:version

指定這個組件的版本資訊。字串的格式為 major.minor.build.revision。預設值為 0。

如果指定 /version,則必須同時指定 major。如果指定 major 和 minor,可以將 build 指定為星號 (*)。這會使 build 等於自 2000 年 1 月 1 日本地時間算起的天數,而 revision 則會等於自 2000 年 1 月 1 日本地時間午夜算起的秒數除以 2。

如果指定 major、minor 和 build,可以將 revision 指定為星號 (*)。這會使 revision 等於自 2000 年 1 月 1 日本地時間午夜算起的秒數除以 2。

總結來說,有效的版本字串為:

X

X.X

X.X.*

X.X.X

X.X.X.*

X.X.X.X

此處的 X 是指任何不帶正負號的簡短常數 (Unsigned Short Constant),除 65535 之外 (0-65534)。

如果不指定 /win32res,會將 /version 當成 Win32 Assembly Version 資源。

如果不指定 /win32res/productversion/fileversion,就會使用 /version 做為 Assembly Version、File Version 和 Product Version Win32 資源。

如果指定 /win32res/version 不會影響 Win32 資源資訊。

您也可以在任何 MSIL 模組原始程式碼中指定這個選項當做自訂屬性 (AssemblyVersionAttribute)。

/win32icon:filename

將 .ico 檔案插入組件中。.ico 檔案會為輸出檔案指定在 Windows 檔案總管中所需的外觀。

/win32res:filename

將 Win32 資源 (.res 檔案) 插入輸出檔案中。您可以使用資源編譯器建立 Win32 資源檔。資源編譯器是在編譯 Visual C++ 程式時叫用的,而 .res 檔案則是用 .rc 檔案建立的。

@filename

指定包含 Al.exe 命令的回應檔 (Response File)。

回應檔中的命令可顯示為一行一個,也可以全部顯示在同一行並以一個或多個空格加以分隔。

/?

顯示工具的命令語法和選項。

備註

所有 Visual Studio 編譯器都會產生組件。但是,如果您有一個或多個模組 (不含資訊清單的中繼資料),可以使用 Al.exe 在別的檔案中建立包含資料清單的組件。

若要在快取中安裝組件、從快取中移除組件,或列出快取的內容,請使用全域組件快取工具 (Gacutil.exe)

範例

下列命令會使用 t2.netmodule 模組中的組件建立可執行檔 t2a.exe。進入點是 MyClass 中的 Main 方法。

al t2.netmodule /target:exe /out:t2a.exe /main:MyClass.Main

請參閱

參考

.NET Framework 工具

Al.exe 工具錯誤和警告

強式名稱工具 (Sn.exe)

全域組件快取工具 (Gacutil.exe)

SDK 命令提示字元

其他資源

使用組件設計程式