Assembly installation error codes in .NET Framework 2.0 setup

I have written several posts in the past about 1935 errors that can happen during the installation of the .NET Framework and other applications that install managed code to the GAC (most notably, this troubleshooting guide).

Starting in version 2.0, you will no longer see 1935 errors during .NET Framework redistributable setup. This is because we created a new custom action to install assemblies to the GAC instead of using the built-in MsiAssembly and MsiAssemblyName tables. This custom action was created to eliminate the need to carry 2 copies of each assembly in the setup package for the .NET Framework in order to install to both the GAC and the local file system. More information about why we would otherwise need to carry 2 copies of each assembly can be found in this previous blog post.

The custom action that installs assemblies to the GAC during .NET Framework setup calls fusion APIs directly and uses information in the custom MSI tables named Assembly and AssemblyName (instead of MsiAssembly and MsiAssemblyName) to determine what assemblies to install to the GAC. The custom action also logs a new set of error codes in case of any failures.

The following is a list of all possible assembly installation errors that can occur during .NET Framework 2.0 setup:

  • 25000 = "Unexpected error occurred during assembly configuration. This setup package may be bad."

  • 25001 = "Unexpected error occurred during assembly configuration. Function '[2]()' returned [3]."

  • 25002 = "Error occurred while initializing fusion. Unable to load [2]. System error: [3]"

  • 25003 = "Error occurred while initializing fusion."

  • 25004 = "Failed to execute query '[2]'. Is table AssemblyName missing in the MSI package?"

  • 25005 = "There's no matching record for component '[2]' in AssemblyName table."

  • 25006 = "Error occurred while initializing fusion. Setup could not find function 'LoadLibraryShim' in mscoree.dll. System error: [2]"

  • 25007 = "Error occurred while initializing fusion. Setup could not load fusion with LoadLibraryShim(). Error: [2]"

  • 25008 = "Unexpected error occurred during assembly installation."

  • 25010 = "Failed to install assembly '[2]' because the check of the module's hash failed." (the equivalent of fusion error code

    0x80131039 - COR_E_MODULE_HASH_CHECK_FAILED)
    25011 = "Failed to install assembly '[2]' because one or more modules specified in the manifest cannot be found." (the equivalent of fusion error code 0x80131042 - FUSION_E_ASM_MODULE_MISSING)

  • 25012 = "Failed to install assembly '[2]' because one or more modules were streamed in which did not match those specified by the manifest. Invalid file hash in the manifest?" (the equivalent of fusion error code 0x80131043 - FUSION_E_UNEXPECTED_MODULE_FOUND)

  • 25013 = "Failed to install assembly '[2]' because strong name signature could not be verified. Was the assembly built delay-signed?" (the equivalent of fusion error code 0x80131045 - FUSION_E_SIGNATURE_CHECK_FAILED)

  • 25014 = "Failed to install assembly '[2]' because of invalid file or assembly name. The name of the file must be the name of the assembly plus .dll or .exe." (the equivalent of fusion error code 0x80131047 - FUSION_E_INVALID_NAME during install)

  • 25015 = "Failed to install assembly '[2]' because of system error: [3]" (this is a catch-all for all error codes not listed above during installation)

  • 25020 = "Failed to uninstall assembly '[2]' because the strong name is not valid." (the equivalent of fusion error code 0x80131047 - FUSION_E_INVALID_NAME during uninstall)

  • 25021 = "Uninstall of assembly '[2]' is not allowed." (the equivalent of fusion error code 0x80131049 - FUSION_E_UNINSTALL_DISALLOWED)

  • 25022 = "Failed to uninstall assembly '[2]' because of system error: [3]" (this is a catch-all for all error codes not listed above during uninstallation)