Deploying applications written with the .NET Framework is much easier than deploying applications written with MFC. In addition to having a built-in Windows Install builder within Visual Studio .NET, the actual installation of a project is made simple by the use of assemblies and assembly manifests that describe the contents and dependencies.
Obviously, because the .NET runtime is not included with all versions of Windows, you will have to ship and install it on a user's system. This will probably be a single-setup application similar to other technologies releases by Microsoft, which will make installing the runtime easy. However, with a technology as big as .NET is, you should expect the file to be somewhat large.
An assembly in the .NET Framework is any EXE or DLL file that implements managed code. The assembly manifest describes the version information, dependencies for the assembly with version information, and type information on what the assembly exports for use. Some of the benefits of deploying .NET applications and the use of assemblies are as follows:
Applications are isolated and produce no impact on existing installed applications because DLL conflicts are eliminated through the use of assemblies. Several DLLs can coexist with the same basic name; however, they can be different versions. The .NET application or component knows how to load the appropriate matching component.
Components are private by default and are not installed where they are visible to other applications.
Code sharing is explicit and is not the default, which forces the using application to have the code references within its assembly.
Installing applications is as simple as copying the files to a computer. Registry settings aren't needed for a .NET application to function.
Creating an installer is quicker since integration with the Windows Installer for advertising, publishing, repairing, and install-on-demand features is included right out of the box.
Enterprise deployment of applications, including the use of Active Directory, makes installation across the network much simpler.
Incremental downloads and caching keep the downloaded software to the minimum required for the accessed components.
Assemblies can describe a single file or a set of related files. An assembly manifest can describe several unlinked but related files as a single assembly or a single linked file, such as an EXE file, that contains all the information needed to execute.
Assemblies can also describe component DLL files that other assemblies can use. These component assemblies can be private to the user or global, meaning several applications and components can use a single component assembly. In order to make sure there is a single location for global assemblies, the .NET Framework defines a global assembly cache that contains all deployed shared assemblies. Figure 4.1 shows the global assembly cache viewed with Windows Explorer.