One of the primary goals of assemblies in NGWS is to solve the versioning problem. Specifically, assemblies provide a means for developers to specify version rules between different software components and have those rules enforced at runtime.
An assembly is the fundamental unit of sharing and reuse in NGWS. As such, it follows that assemblies are the unit at which version information is specified and enforced.
Each assembly has two version “numbers”. The first is called a compatibility version. This version number is part of the assembly’s identity and is a key part in the type resolution process at Runtime. We call it a compatibility number because the semantics of this number make statements about a particular version’s compatibility with previous versions. The second version “number” is called an informational version. The informational version is actually a string and is used to represent additional version information that is included for documentation purposes only. This version information corresponds to the product’s marketing literature, packaging, etc.. and is not used at runtime at all. For example, an informational version may be something like “NGWS SDK Beta1”, or “Acme Control SP 2”.