Al.exe (組件連結器)

更新:2011 年 4 月

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

注意事項注意事項

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

這個工具會自動隨 Visual Studio 和 Windows SDK 一起安裝。 若要執行工具,建議您使用 Visual Studio 命令提示字元或 Windows SDK 命令提示字元。 這些公司可讓您輕鬆地執行工具,而不需瀏覽至安裝資料夾。 如需詳細資訊,請參閱Visual Studio 和 Windows SDK 命令提示字元

  • 如果您已經在電腦上安裝 Visual Studio:在工作列上,依序按一下 Start、All Programs、Visual Studio、Visual Studio Tools,然後按一下 Visual Studio Command Prompt。

    -或-

    如果您已經在電腦上安裝 Windows SDK:在工作列上,依序按一下 Start、All Programs、Windows SDK 的資料夾,然後按一下Command Prompt(或 CMD Shell)。

  • 在命令提示字元中輸入下列文字:

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 (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 等於自本地時間當天午夜以來的秒數除以 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

請參閱

工作

HOW TO:使用 MSTest 從命令列執行自動化測試

參考

Al.exe 工具錯誤和警告

Sn.exe (強式名稱工具)

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

Visual Studio 和 Windows SDK 命令提示字元

其他資源

.NET Framework 工具

使用組件設計程式

變更記錄

日期

記錄

原因

2011 年 4 月

加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。

資訊加強。