Does Windows Server 2016 Support .NET Framework 3.5.1? Compatibility and Installation Guide


2 views

Windows Server 2016 does indeed support .NET Framework 3.5.1, though Microsoft's documentation may not explicitly list it. The framework is available as an installable feature rather than being pre-installed, which aligns with Microsoft's component-based approach since .NET 3.5 SP1.

While Microsoft's support documentation doesn't mention Windows Server 2016, the framework follows the Windows component support lifecycle. Since Server 2016 is still in extended support (until January 2027), .NET 3.5.1 receives the same support level.

Here are three ways to install .NET 3.5.1 on Windows Server 2016:

1. Server Manager GUI

1. Open Server Manager
2. Select "Add roles and features"
3. Navigate to Features > .NET Framework 3.5 Features
4. Check the box and complete installation

2. PowerShell Command

Install-WindowsFeature -Name NET-Framework-Core -Source D:\sources\sxs

Note: Replace "D:" with your installation media drive letter.

3. DISM Command (Offline Installation)

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\sources\sxs

To verify successful installation:

Get-WindowsFeature -Name NET-Framework-Core | Select-Object Installed

Common issues and solutions:

  • Error 0x800f081f: Missing installation source - specify the correct source path
  • Dependency errors: Ensure Windows Update service is running
  • Port conflicts: Check if port 80 is available for Windows Update

While .NET 3.5.1 runs on Server 2016, consider these factors:

  • Performance impact when running alongside .NET 4.x
  • Security updates are bundled with Windows updates
  • Some legacy applications may require additional compatibility settings

For new development, consider upgrading to supported frameworks:

// Example: Upgrading a WCF service from .NET 3.5 to 4.8
// Original config in web.config:
<system.serviceModel>
  <services>
    <service name="MyService">
      <endpoint address="" 
                binding="basicHttpBinding"
                contract="IMyService" />
    </service>
  </services>
</system.serviceModel>

// Modern approach using CoreWCF:
services.AddServiceModelServices()
        .AddServiceModelMetadata()
        .AddServiceModelWebServices();

However, if you must maintain .NET 3.5.1 compatibility, ensure proper isolation from newer frameworks to avoid conflicts.


html

Despite lacking explicit documentation on Microsoft's official KB articles, .NET Framework 3.5.1 (a subset of 3.5 SP1) is indeed supported on Windows Server 2016 as an installable Windows component. This aligns with Microsoft's component-based support policy where framework versions inherit the host OS's lifecycle.

To confirm installation status, run this PowerShell cmdlet:

Get-WindowsFeature -Name NET-Framework-Core | Where-Object {$_.InstallState -eq "Installed"}

For systems where it's not pre-installed (common in Server Core deployments), execute:

Install-WindowsFeature NET-Framework-Core -Source \\network\share\sxs

When dealing with air-gapped servers, mount the Windows Server 2016 ISO and run:

Dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\sources\sxs /LimitAccess

Check the registry key for version confirmation:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" -Name Version | Select-Object Version

Expected output for 3.5.1 should show 3.5.30729.4926 or higher.

Error 0x800f081f typically indicates missing source files. Resolve by:

  1. Specifying the -Source parameter pointing to \sxs folder
  2. Using Group Policy to configure alternative source paths

While 3.5.1 runs on Server 2016, note these constraints:

  • WCF services require additional Windows Features
  • ASP.NET 2.0 apps need IIS 6 Metabase compatibility mode
  • Windows Identity Foundation (WIF) requires separate installation

For automated deployments via DSC:

Configuration InstallDotNet35 {
    Node "localhost" {
        WindowsFeature NetFx3 {
            Name   = "NET-Framework-Core"
            Ensure = "Present"
            Source = "\\build-server\WS2016$\sources\sxs"
        }
    }
}