.NET Framework setup and language packs
The .NET Framework setup and packaging changed somewhat between v1.0 and v1.1 and there are further changes coming for v2.0 with respect to packaging of core bits and satellite language resources. I wanted to take a minute and provide an outline of the changes that have gone on as well as some of the reasoning behind them:
.NET Framework 1.0
1. There is a separate dotnetfx.exe package for each language version of the .NET Framework. Each package contains an MSI with a unique product code.
2. The English version contains the bits that provide the core product functionality as well as English language resources that are compiled into the core bits.
3. The non-English versions contained the core product bits (with English language resources) as well as a set of satellite resource DLLs that provide the appropriate non-English string resources.
4. Each language version of the .NET Framework SDK contained the equivalent of the matching language version of the .NET Framework redist package as part of the MSI.
5. Because of items 1 and 4, any time a Windows Installer patch is created for any of the bits that provide the core .NET Framework product functionality, separate logic has to be created to allow the patch to apply to all language versions of the .NET Framework redist and all language versions of the .NET Framework SDK
.NET Framework 1.1
1. There is a separate dotnetfx.exe package for each language version of the .NET Framework. Each package contains an MSI with the same product code and installs identical bits. The only difference between the dotnetfx.exe packages are the setup UI screens – they are translated into the appropriate language.
2. The dotnetfx.exe packages all contain the bits that provide the core product functionality as well as English language resources that are compiled into the core bits.
3. There is a separate langpack.exe for each non-English language version of the .NET Framework. These packages each install a set of satellite resource DLLs that provide the appropriate non-English string resources.
4. The .NET Framework SDK does not contain the .NET Framework redist. The SDK setup detects whether or not the .NET Framework redist is already installed on the machine, and if it is not found it blocks the user from installing the SDK until the redist is installed
.NET Framework 2.0
1. There is a single dotnetfx.exe package. It contains a single MSI that is marked as language-neutral and setup UI resource DLLs for all supported languages. It detects the user’s UI language settings and uses that to determine which language to display setup UI in.
2. The dotnetfx.exe package contains the bits that provide the core product functionality as well as English language resources that are compiled into the core bits.
3. There is a separate langpack.exe for each non-English language version of the .NET Framework. These packages each install a set of satellite resource DLLs that provide the appropriate non-English string resources.
4. The .NET Framework SDK does not contain the .NET Framework redist. The SDK setup detects whether or not the .NET Framework redist is already installed on the machine, and if it is not found it blocks the user from installing the SDK until the redist is installed
So as you can see from above, there has been a gradual evolution from separate language-specific versions of the .NET Framework to a single language-neutral core package and satellite language packs. The solution being delivered for .NET Framework 2.0 is what we had originally hoped to ship for .NET Framework 1.1 but the changes required to make the core setup package truly language neutral was too great to finish with high quality in the relatively short time in between shipping 1.0 and 1.1. We have noted some confusion about why there are multiple dotnetfx.exe packages available on the Microsoft download center for v1.1, and I often hear questions about how the bits each of them installs differ from one another. I feel like the solution for v2.0 is much cleaner and easier to understand.
Some advantages of this packaging solution are:
1. Setup developers only need to include one version of dotnetfx.exe for any scenario where their application requires the .NET Framework.
2. A single patch can be created for any fixes made to core .NET Framework binaries. This makes the testing matrix within Microsoft simpler and improves the turnaround time for delivering fixes.
Some disadvantages of this packaging solution are:
1. Setup developers need to include one or more langpack.exe files to create a multi-lingual managed application.
2. Installing the .NET Framework SDK requires a separate step to install the .NET Framework redist.
I would like to hear any feedback that anyone has about the packaging changes that have happened for the .NET Framework. Is it making things easier for setup developers? Or harder (or more confusing)? Do you have any suggestions for future versions? If you have any questions or comments about any of the above please post them on my blog or send me a direct email at aaronste (at) microsoft (dot) com.
Comments
- Anonymous
November 16, 2004
In .NET 2.0 will the order of install of the language packs have any significant impact?
For example: If I install the English language pack first and then the French will that have any impact rather than it being doine the other way round ? - Anonymous
November 16, 2004
For 1.1:
> These [langpack] packages each install a set of satellite resource DLLs that provide the appropriate non-English string resources.
... and they also seem to install a localized version of .Net Framework Configuration/Wizards under Administrative Tools. Which is actually a pain: I want multilingual satellite assemblies on my server, but I don't want additional multilingual UIs. - Anonymous
November 16, 2004
Aaron, could you please also calrify about the language versions of SP1 for the .NEt Framework version 1.1? I see that there are separate versions of the SP, one for Windows Server 2003 and another one for other Windows versions. Now the 2003 version is available in 18 languages, the other version in 22 languages. Do these SP languages only apply to the setup UI or also to the framework bits (language DLLs)? - Anonymous
July 12, 2005
There have been several changes in the .NET Framework setup and packaging that are important from an... - Anonymous
July 12, 2005
I find this architecture very useful. I only regret that other MS products don't use the same philosophy - Anonymous
August 03, 2005
I have seen a few issues in the past where a user visits Windows Update and is not offered the .NET Framework... - Anonymous
August 15, 2005
In the past, I've written a little bit about the packaging for the .NET Framework setup, including changes... - Anonymous
May 24, 2006
hi need to check, is there any way i can package only the .net framework 1.1SP1 with the ASP.net securty update (EXCLUDING the core .net framework 1.1). Thanks - Anonymous
May 25, 2006
Hi Haslihb - I don't know of a way to create a combined patch like you are describing. You can create an administrative install point that includes the core .NET Framework + hotfixes + service packs if you want to (using instructions from http://blogs.msdn.com/astebner/archive/2005/03/05/385971.aspx). But those instructions require the core bits to be a part of the image. - Anonymous
June 13, 2006
PingBack from http://www.galhano.com/blog/?p=98 - Anonymous
January 20, 2009
PingBack from http://www.hilpers.com/1041071-net-framework-2-0-sprachunabhaengig