訓練
組件名稱
組件的名稱儲存在中繼資料內,而且對組件範圍具有重大影響,並供應用程式使用。 強式命名組件的完整名稱包括組件的名稱、文化特性、公開金鑰、版本號碼,以及處理器架構 (選擇性)。 請使用 FullName 屬性來取得所載入組件的完整名稱,經常又稱為顯示名稱。
執行階段會使用名稱資訊來找出組件,並將它與其他具有相同名稱的組件區隔開。 例如,稱為 myTypes
的強式名稱組件的完整名稱可能如下:
myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
在此範例中,完整名稱指出 myTypes
組件具有含公開金鑰權杖的強式名稱、具有文化特性值「美式英文」,以及具有版本號碼 1.0.1234.0。 其處理器架構為 msil
,表示這將是根據作業系統和處理器編譯成 32 位元程式碼或 64 位元程式碼的 Just-In-Time (JIT)。
提示
ProcessorArchitecture
資訊允許使用處理器專屬的組件版本。 您可以建立組件的版本,其身分識別只有處理器架構不同,例如 32 位元和 64 位元處理器特定版本。 強式名稱不需要處理器架構。 如需詳細資訊,請參閱AssemblyName.ProcessorArchitecture。
要求組件中類型的程式碼必須使用完整組件名稱。 這稱為完整繫結。 在 .NET Framework 中參考組件時,不允許只指定組件名稱的部分繫結。
構成 .NET Framework 之組件的所有組件參考必須也包含組件的完整名稱。 例如,1.0 版的 System.Data .NET Framework 組件的參考會包括:
System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
版本會對應到 .NET Framework 1.0 版隨附之所有 .NET Framework 組件的版本號碼。 針對 .NET Framework 組件,文化特性值一律為中性,而且公開金鑰與上述範例所示相同。
例如,若要在組態檔中新增組件參考來設定追蹤接聽程式,您將包括系統 .NET Framework 組件的完整名稱:
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
注意
繫結至組件時,執行階段會將組件名稱視為不區分大小寫,但會保留組件名稱中所使用的大小寫。 Windows SDK 中的數個工具會以區分大小寫的方式處理組件名稱。 為了獲得最佳結果,請如同其區分大小寫一樣地管理組件名稱。
判斷組件的身分識別時,執行階段不會考慮檔案名稱。 執行階段必須知道包含組件名稱、版本、文化特性和強式名稱的組件身分識別。
例如,如果您有稱為 myAssembly.exe 的組件可參考稱為 myAssembly.dll 的組件,則會在執行 myAssembly.exe 時正確地進行繫結。 不過,如果另一個應用程式使用方法 AppDomain.ExecuteAssembly 執行 myAssembly.exe,則執行階段會判斷在 myAssembly.exe 要求繫結至 myAssembly
時已經載入 myAssembly
。 在此情況下,永遠不會載入 myAssembly.dll。 因為 myAssembly.exe 不包含所要求的型別,因此會發生 TypeLoadException。
若要避免這個問題,請確定構成應用程式的組件沒有相同的組件名稱,或將同名的組件放在不同的目錄中。
注意
在 .NET Framework 中,如果您將強式名稱組件放入全域組件快取中,組件的檔案名稱必須符合組件名稱 (不包括副檔名,例如 .exe 或 .dll)。 例如,如果組件的檔案名稱是 myAssembly.dll,則組件名稱必須是 myAssembly
。 只有在根應用程式目錄中部署的私用組件才能具有與檔案名稱不同的組件名稱。