What is inside a manifest.
A side-by-side manifest is an XML file. Even though at the first glance XML looks very much like HTML, there are significant differences. XML is case-sensitive and strictly enforces syntax. There are no predefined tags - tag names depend on the specific application of the given XML file. All tags must have end-tags. All XML tags in a file must be enclosed in a single root tag. Parameter, or attribute, values must be enclosed in double quotes. For more information on XML see http://www.w3c.org/XML
This is the contents of the manifest created in the previous step-by-step guide:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <assemblyIdentity name="notepad.exe" version="6.3.9600.16384" type="win32" processorArchitecture="amd64"/> <dependency> <dependentAssembly> <assemblyIdentity name="Microsoft.Windows.GdiPlus" version="1.1.9600.17227" type="win32" publicKeyToken="6595b64144ccf1df" processorArchitecture="amd64"/> </dependentAssembly> </dependency> </assembly>
The first line, <?xml ...?> is a standard XML way of introducing an XML file.
The next line, <assembly ...> is the root tag in the manifest. It describes the namespace and version of this manifest.
The <assemblyIdentity> tag is used in more then one place. It contains the name of the assembly. The first occurrence above names this assembly.
Assembly name consists of several pieces of information including:
name (required): The text part of the assembly name
version (required): Assembly version
type (required): All win32 side-by-side assemblies use the same string win32
processorArchitecture: We are currently interested in x86, but other values (amd64, ia64,msil) are possible.
publicKeyToken: A value derived from the public key used to sign the assembly. Only present if the assembly is signed. All shared assemblies must be signed. Private assemblies are not signed.
The set of three nested tags <dependency> <dependentAssembly> <assenblyIdentity> is a reference to an assembly defined somewhere else. In this case a Microsoft-provided shared assembly.
Note that XML rules are strictly enforced here. You cannot change tag name case or forget a closing tag.