How the full install packages for the .NET Framework 3.0 and the .NET Framework 3.5 differ

Question:

When the .NET Framework 3.0 shipped, 3 packages were made available for download - a 2.8 megabyte web download bootstrapper, an approximately 50 megabyte full install package for x86 processor architectures and an approximately 90 megabyte full install package for x64 processor architectures.

When the .NET Framework 3.5 shipped, 2 packages were made available for download - a 2.7 megabyte web download bootstrapper and an approximately 200 megabyte full install package.

Why is the .NET Framework 3.5 full install package so much larger than the 3.0 full install package, and what exactly does it contain?  If I need to redistribute the .NET Framework 3.5 as a part of my installer, do I have any options to reduce the size?

Answer:

The .NET Framework 3.5 full install package includes all prerequisites and product components that could need to be installed for any processor architecture.  Basically, it is the union of the x86, x64 and ia64 packages and prerequisites.  The .NET Framework 3.5 includes the following prerequisites in addition to the main .NET Framework 3.5 product payload:

  • .NET Framework 2.0 with SP1
  • .NET Framework 3.0 with SP1
  • MSXML 6.0
  • RGB Rasterizer
  • Windows Imaging Components (WIC)

The 200 megabyte full install package was not really designed to be redistributed as is by installers that require the .NET Framework, although it will work fine for that purpose if the installer does not have any sensitivity to the larger package size.

Installers that want to reduce the .NET Framework 3.5 payload size have a couple of options:

  1. Carry the web download bootstrapper and let it decide what payload is needed based on the state of the system it is being installed on.  This can be a good option if it is acceptable for the setup to require internet access during installation.
  2. Extract the contents of the full install package and selectively remove payload that is not needed or supported by the scenarios that the setup that requires it supports.  I describe this option in a bit more detail in this blog post.  At a high level, this option involves identifying supported OS's and processor architectures and then selectively removing prerequisite payload from the .NET Framework 3.5 install location for platforms that the setup carrying the .NET Framework 3.5 does not plan to support.

There is some more specific .NET Framework 3.5 deployment documentation that will be published soon to provide more details about how to redistribute the .NET Framework 3.5 in various types of scenarios.  The prerequisites and install options will be described in much more detail than I am going into in this blog post once it is published.  I will update my blog with a link to the .NET Framework 3.5 deployment guide once it is available.

As a side note, I have seen some size comparison charts that show the .NET Framework size growing from 20 megabytes in 1.0 up to 50 megabytes in 3.0 and then 200 megabytes in 3.5.  It looks like this type of size chart was based on the size of this full install package for the .NET Framework 3.5.  That isn't really an accurate comparison though.  The 50 megabyte size for the .NET Framework 3.0 only includes x86 components, so an equivalent size for x86 components for the .NET Framework 3.5 is approximately 57 megabytes.  That means that the size of features that are new between the .NET Framework 3.0 and 3.5 is approximately 6 or 7 megabytes.  That is still fairly large for something that has to be redistributed by other installers for their applications to use at runtime, but it is not nearly as dramatic as saying that the .NET Framework 3.5 is 200 megabytes in size compared to 50 megabytes for the .NET Framework 3.0.