Assemblynamen

De naam van een assembly wordt opgeslagen in metagegevens en heeft een aanzienlijke invloed op het bereik van de assembly en het gebruik door een toepassing. Een sterk benoemde assembly heeft een volledig gekwalificeerde naam met de naam, cultuur, openbare sleutel, versienummer en, optioneel, processorarchitectuur. Gebruik de FullName eigenschap om de volledig gekwalificeerde naam te verkrijgen, die vaak de weergavenaam wordt genoemd, voor geladen assembly's.

De runtime gebruikt de naamgegevens om de assembly te zoeken en te onderscheiden van andere assembly's met dezelfde naam. Een assembly met een sterke naam die wordt aangeroepen myTypes , kan bijvoorbeeld de volgende volledig gekwalificeerde naam hebben:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil

In dit voorbeeld geeft de volledig gekwalificeerde naam aan dat de myTypes assembly een sterke naam heeft met een openbare-sleuteltoken, de cultuurwaarde voor Verenigde Staten Engels heeft en een versienummer van 1.0.1234.0 heeft. De processorarchitectuur is msil, wat betekent dat deze just-in-time (JIT) wordt gecompileerd naar 32-bits code of 64-bits code, afhankelijk van het besturingssysteem en de processor.

Tip

De ProcessorArchitecture informatie maakt processorspecifieke versies van assembly's mogelijk. U kunt versies van een assembly maken waarvan de identiteit alleen verschilt per processorarchitectuur, bijvoorbeeld 32-bits en 64-bits processorspecifieke versies. Processorarchitectuur is niet vereist voor sterke namen. Zie AssemblyName.ProcessorArchitecture voor meer informatie.

Code die typen in een assembly aanvraagt, moet een volledig gekwalificeerde assemblynaam gebruiken. Dit wordt volledig gekwalificeerde binding genoemd. Gedeeltelijke binding, die alleen een assemblynaam opgeeft, is niet toegestaan bij het verwijzen naar assembly's in .NET Framework.

Alle assemblyverwijzingen naar assembly's waaruit .NET Framework bestaat, moeten ook de volledig gekwalificeerde naam van de assembly bevatten. Een verwijzing naar de System.Data .NET Framework-assembly voor versie 1.0 bevat bijvoorbeeld:

System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

De versie komt overeen met het versienummer van alle .NET Framework-assembly's die zijn geleverd met .NET Framework versie 1.0. Voor .NET Framework-assembly's is de cultuurwaarde altijd neutraal en is de openbare sleutel hetzelfde als in het bovenstaande voorbeeld.

Als u bijvoorbeeld een assembly-verwijzing wilt toevoegen aan een configuratiebestand om een traceringslistener in te stellen, moet u de volledig gekwalificeerde naam van de .NET Framework-assembly van het systeem opnemen:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />

Notitie

De runtime behandelt assemblynamen als niet hoofdlettergevoelig bij het binden aan een assembly, maar behoudt ongeacht het geval dat in een assemblynaam wordt gebruikt. Verschillende hulpprogramma's in de Windows SDK verwerken assemblynamen als hoofdlettergevoelig. Voor de beste resultaten beheert u assemblynamen alsof ze hoofdlettergevoelig zijn.

Toepassingsonderdelen een naam toewijzen

De runtime beschouwt de bestandsnaam niet bij het bepalen van de identiteit van een assembly. De assembly-identiteit, die bestaat uit de assemblynaam, versie, cultuur en sterke naam, moet duidelijk zijn voor de runtime.

Als u bijvoorbeeld een assembly hebt met de naam myAssembly.exe die verwijst naar een assembly met de naam myAssembly.dll, wordt de binding correct uitgevoerd als u myAssembly.exe uitvoert. Als een andere toepassing echter myAssembly.exe uitvoert met behulp van de methodeAppDomain.ExecuteAssembly, wordt door de runtime bepaald dat deze myAssembly al is geladen wanneer myAssembly.exe een binding aanvraagt.myAssembly In dit geval wordt myAssembly.dll nooit geladen. Omdat myAssembly.exe het aangevraagde type niet bevat, treedt er een TypeLoadException op.

Om dit probleem te voorkomen, moet u ervoor zorgen dat de assembly's waaruit uw toepassing bestaat niet dezelfde assemblynaam hebben of assembly's met dezelfde naam in verschillende mappen plaatsen.

Notitie

Als u in .NET Framework een sterk benoemde assembly in de globale assemblycache plaatst, moet de bestandsnaam van de assembly overeenkomen met de assemblynaam, niet inclusief de bestandsnaamextensie, zoals .exe of .dll. Als de bestandsnaam van een assembly bijvoorbeeld is myAssembly.dll, moet de assemblynaam zijn myAssembly. Privéassembly's die alleen in de hoofdmap van de toepassing zijn geïmplementeerd, kunnen een assemblynaam hebben die verschilt van de bestandsnaam.

Zie ook