This is preliminary documentation and subject to change.
To comment on this topic, please send us email at ngwssdk@microsoft.com. Thanks!
What is a shared name?
A shared name is a simple text name accompanied by a public key and a digital signature that was generated over the assembly file (the file that contains the assembly manifest, which in turn contains the names and hashes of all of the files that make up the assembly) using the corresponding private key. Visual Studio 7.0 and other development tools can create shared names for each build, and signatures optionally can be added to deter tampering. Assemblies with the same shared name are expected to be identical.
A developer can ensure that a name is globally unique by assigning an assembly a shared name. In particular, shared names satisfy the following requirements:
- Shared names guarantee name uniqueness by relying on unique key-pairs
- Shared names prevent others from "taking over your namespace". Because only you have your private key; no one can generate the same name that you can. An assembly generated with one public key has a different name than an assembly generated with another private key.
- Shared names provide some notion of identity. If the runtime security checks pass, you can be guaranteed that the assembly comes from the person you thought it did (assuming his private key wasn't compromised, of course). Note however that shared names in and of themselves do not provide a level of trust. Trust is accomplished through full digital signatures complete with certificates.
Shared assemblies installed in the assembly cache must have shared names.