chocolatey/choco · critical · ApplicationException

.NET 4.8 is not installed or may need a reboot to complete i

Error message

.NET 4.8 is not installed or may need a reboot to complete installation.
Please install .NET Framework 4.8 manually and reboot the system.
Download at 'https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe'

What it means

Chocolatey's startup guard ThrowIfNotDotNet48 verifies that .NET Framework 4.8 (release >= 528040) is installed by reading HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release (32-bit registry view). If the key/value is missing or below 528040 on Windows, it throws an ApplicationException telling the user to install .NET 4.8 and reboot. This is a hard prerequisite: Chocolatey cannot run its managed code without the runtime.

Source

Thrown at src/chocolatey.console/Program.cs:327

choco feature enable --name=""'disableCompatibilityChecks'""

Or by passing the --skip-compatibility-checks option when executing a
command.");
        }

        private static void ThrowIfNotDotNet48()
        {
            if (Platform.GetPlatform() == PlatformType.Windows)
            {
                // https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#minimum-version
                const int net48ReleaseBuild = 528040;
                const string regKey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

                using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(regKey))
                {
                    if (ndpKey == null || ndpKey.GetValue("Release") == null || (int)ndpKey.GetValue("Release") < net48ReleaseBuild)
                    {
                        throw new ApplicationException(
                            @".NET 4.8 is not installed or may need a reboot to complete installation.
Please install .NET Framework 4.8 manually and reboot the system.
Download at 'https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe'"
                                .FormatWith(Environment.NewLine));
                    }
                }
            }
        }
    }
}

View on GitHub (pinned to 0d5abdd10c)

Solutions

  1. Install .NET Framework 4.8 from the URL in the message (ndp48-x86-x64-allos-enu.exe) and reboot.
  2. On Server Core / automated builds, use DISM or a provisioning step to install .NET 4.8 then reboot before invoking choco.
  3. Upgrade to a base OS image that ships .NET 4.8 out of the box (Windows 10 1903+, Server 2022).
Defensive patterns

Strategy: validation

Validate before calling

// Probe .NET 4.8 release BEFORE invoking choco in provisioning.
using (var k = Microsoft.Win32.RegistryKey.OpenBaseKey(
    Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry32)
    .OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"))
{
    int release = (int)(k?.GetValue("Release") ?? 0);
    if (release < 528040)
    {
        // install ndp48 then reboot before running choco
    }
}

Prevention

When it happens

Trigger: Running choco.exe on a Windows machine where the NET Framework 4.8 Full 'Release' DWORD is absent or < 528040 (e.g. only 4.7.x installed, or 4.8 installed but pending reboot before the registry value is finalized).

Common situations: Fresh Windows Server 2016/2019 or older Windows 10 images without .NET 4.8; CI/build agents based on older base images; a just-completed .NET 4.8 installer that has not yet rebooted; locked-down systems where the registry value was reset.

Related errors


AI-assisted analysis of chocolatey/choco@0d5abdd10c (2026-08-13). Data as JSON: /api/errors/10df848999205e93. Report an issue: GitHub.