System.Reflection.AssemblyName Class

Describes an assembly's unique identity in full.

See Also: AssemblyName Members


public sealed class AssemblyName : ICloneable, System.Runtime.InteropServices._AssemblyName, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable


The System.Reflection.AssemblyName object contains information about an assembly, which you can use to bind to that assembly. An assembly's identity consists of the following:

The simple name is typically the file name for the manifest file without its extension. The key pair includes a public and private key, used to create strong-name signatures for assemblies.

All compilers that support the common language runtime will emit the simple name of a nested class, and reflection constructs a mangled name when queried, in accordance with the following conventions.

Backslash (\)

Escape character.

Comma (,)

Precedes the assembly name.

Plus sign (+)

Precedes a nested class.

For example, the fully qualified name for a class might look like this:


A "++" becomes "\+\+", and a "\" becomes "\\".

This qualified name can be persisted and later used to load the Type. To search for and load a Type, use Type.GetType either with the type name only or with the assembly qualified type name. Type.GetType with the type name only will look for the Type in the caller's assembly and then in the System assembly. Type.GetType with the assembly qualified type name will look for the Type in any assembly.

A fully specified System.Reflection.AssemblyName must have the name, culture, public key or public key token, major version, minor version, build number, and revision number parameters. The last four are packaged in the Version type.

To create a simple name, create an System.Reflection.AssemblyName object using the default constructor and set the AssemblyName.Name. The other properties are optional.

To create a full strong name, create an System.Reflection.AssemblyName object using the default constructor and set the AssemblyName.Name and AssemblyName.KeyPair. The other properties are optional. Use AssemblyName.SetPublicKey(Byte[]) and AssemblyName.SetPublicKeyToken(Byte[]) to set the public key and the strong name. The strong name signing always uses the System.Security.Cryptography.SHA1 hash algorithm.

To ensure that the names are constructed correctly, use the following properties:

You can also get the name by using the /l option with the Global Assembly Cache Tool (Gacutil.exe)

For a partially specified strong name, create an System.Reflection.AssemblyName object using the default constructor and set the name and public key. An assembly created using such an System.Reflection.AssemblyName can be signed later using the Assembly Linker (Al.exe).

It is possible to specify a public key and a AssemblyName.KeyPair with inconsistent values. This can be useful in developer scenarios. In this case, the public key retrieved with AssemblyName.GetPublicKey specifies the correct public key, while the AssemblyName.KeyPair specifies the public and private keys used during development. When the runtime detects a mismatch between the AssemblyName.KeyPair and the public key, it looks up in the registry the correct key that matches the public key.

The format of the display name of an System.Reflection.AssemblyName is a comma-delimited Unicode string that begins with the name, as follows:

Name <,Culture = CultureInfo> <,Version = Major.Minor.Build.Revision> <, StrongName> <,PublicKeyToken> '\0'

Name is the textual name of the assembly. CultureInfo is the RFC1766-format-defined culture. Major, Minor, Build, and Revision are the major version, minor version, build number, and revision number of the assembly. StrongName is the hexadecimal-encoded low-order 64 bits of the hash value of the public key generated using the SHA-1 hashing algorithm and the public key specified by AssemblyName.SetPublicKey(Byte[]). PublicKeyToken is the hexadecimal-encoded public key specified by AssemblyName.SetPublicKey(Byte[]).

Hexadecimal encoding is defined as the conversion of each byte of a binary object to two hexadecimal characters, progressing from least to most significant byte. Additional display values will be added as deemed necessary.

If the full public key is known, then PublicKey may be substituted for StrongName.

Also note that except for Name, which must come first, the lexical order of parameters is unimportant. However, any parameter (Version, Culture, StrongName or PublicKey) not specifically set is considered to be omitted, and the System.Reflection.AssemblyName is then considered partial. When specifying partial information, Name parameters must be specified in the order described above.

When supplying a display name, the convention StrongName =null or PublicKey= null indicates that binding and matching against a simply named assembly is required. Additionally, the convention Culture= "" (double quote representing an empty string) indicates matching against the default culture.

The following example shows an System.Reflection.AssemblyName for a simply named assembly with default culture.


ExampleAssembly, Culture=""

The following example shows a fully specified reference for a strongly named assembly with culture "en".


ExampleAssembly, Version=, Culture=en, PublicKeyToken=a5d015c7d5a0b012


Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)
Assembly Versions: 1.0.5000.0,,