Sammansättningsnamn
En sammansättnings namn lagras i metadata och har en betydande inverkan på sammansättningens omfång och användning av ett program. En stark namngiven sammansättning har ett fullständigt kvalificerat namn som innehåller sammansättningens namn, kultur, offentlig nyckel, versionsnummer och, om du vill, processorarkitektur. Använd egenskapen FullName för att hämta det fullständigt kvalificerade namnet, som ofta kallas visningsnamn, för inlästa sammansättningar.
Körningen använder namninformationen för att hitta sammansättningen och skilja den från andra sammansättningar med samma namn. En stark namngiven sammansättning med namnet myTypes
kan till exempel ha följande fullständigt kvalificerade namn:
myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
I det här exemplet anger det fullständigt kvalificerade namnet att myTypes
sammansättningen har ett starkt namn med en offentlig nyckeltoken, har kulturvärdet för USA engelska och har ett versionsnummer 1.0.1234.0. Processorarkitekturen är msil
, vilket innebär att den just-in-time (JIT)-kompileras till 32-bitarskod eller 64-bitarskod beroende på operativsystem och processor.
Dricks
Informationen ProcessorArchitecture
tillåter processorspecifika versioner av sammansättningar. Du kan skapa versioner av en sammansättning vars identitet endast skiljer sig åt efter processorarkitektur, till exempel 32-bitars och 64-bitars processorspecifika versioner. Processorarkitektur krävs inte för starka namn. Mer information finns i AssemblyName.ProcessorArchitecture.
Kod som begär typer i en sammansättning måste använda ett fullständigt kvalificerat sammansättningsnamn. Detta kallas för fullständigt kvalificerad bindning. Partiell bindning, som endast anger ett sammansättningsnamn, tillåts inte vid hänvisning till sammansättningar i .NET Framework.
Alla sammansättningsreferenser till sammansättningar som utgör .NET Framework måste också innehålla det fullständigt kvalificerade namnet på sammansättningen. Till exempel skulle en referens till System.Data .NET Framework-sammansättningen för version 1.0 innehålla:
System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Versionen motsvarar versionsnumret för alla .NET Framework-sammansättningar som levererades med .NET Framework version 1.0. För .NET Framework-sammansättningar är kulturvärdet alltid neutralt och den offentliga nyckeln är densamma som i exemplet ovan.
Om du till exempel vill lägga till en sammansättningsreferens i en konfigurationsfil för att konfigurera en spårningslyssnare skulle du inkludera det fullständigt kvalificerade namnet på systemets .NET Framework-sammansättning:
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
Kommentar
Körningen behandlar sammansättningsnamn som skiftlägeskänsliga vid bindning till en sammansättning, men bevarar det fall som används i ett sammansättningsnamn. Flera verktyg i Windows SDK hanterar sammansättningsnamn som skiftlägeskänsliga. För bästa resultat kan du hantera sammansättningsnamn som om de vore skiftlägeskänsliga.
Namnge programkomponenter
Körningen tar inte hänsyn till filnamnet när en sammansättnings identitet fastställs. Sammansättningsidentiteten, som består av sammansättningsnamnet, versionen, kulturen och det starka namnet, måste vara tydlig för körningen.
Om du till exempel har en sammansättning som heter myAssembly.exe som refererar till en sammansättning som heter myAssembly.dll, sker bindningen korrekt om du kör myAssembly.exe. Men om ett annat program kör myAssembly.exe med metoden AppDomain.ExecuteAssemblyavgör körningen som myAssembly
redan har lästs in när myAssembly.exe begär bindning till myAssembly
. I det här fallet läses myAssembly.dll aldrig in. Eftersom myAssembly.exe inte innehåller den begärda typen inträffar en TypeLoadException .
Undvik det här problemet genom att se till att de sammansättningar som utgör ditt program inte har samma sammansättningsnamn eller platssammansättningar med samma namn i olika kataloger.
Kommentar
Om du placerar en stark namngiven sammansättning i den globala sammansättningscachen i .NET Framework måste sammansättningens filnamn matcha sammansättningsnamnet, inte filnamnstillägget, till exempel .exe eller .dll. Om filnamnet för en sammansättning till exempel är myAssembly.dll måste sammansättningsnamnet vara myAssembly
. Privata sammansättningar som endast distribueras i rotprogramkatalogen kan ha ett sammansättningsnamn som skiljer sig från filnamnet.