Windows Server 2012, IIS8, ASP.NET 3.5 and issue installing behind firewall (without internet)

I’ve been starting to become familiar with Windows Server 2012 (aka Win8).   I’ve been a server “guy” for several years and when new versions come out, especially with another version of IIS.  My interest is peaked to evaluate new features.  

This blog post is about a recent issue that alters a bit how we install the .NET 3.5 framework.  A little history, when .NET 1.0 came out, it was a stand-alone runtime that would install on Windows 2000.  When Windows Server 2003, .NET 1.1 was part of the OS and you needed to install the .NET 1.0 runtime (to get have apps that supported 1.0).   When Windows 2008 came out, the .NET 2.0 framework was part of the OS and you needed to install .NET 1.1 on Server 2008 to get the functionality.  (.NET 1.0 didn’t run on Win 2008). 

Now comes along Windows Server 2012, it has .NET 4.x as part of the OS, so based on previous patterns, you’d be able to install the .NET 3.5 using the runtime, *cough* wrong.  Here is the error you’ll get.

One would wonder “How do I get .NET 3.5 (2.0) on my Windows Server 2012?” I came across this article on MSDN, you need to specify a source. (when behind a firewall)

http://msdn.microsoft.com/en-us/library/hh848079%28v=vs.85%29.aspx

I tried putting the .NET 3.5 runtime on a local drive, a network share, both failed.  Here is the error I got in the UI.  Note the /source parameter.

To install IIS8, I use a command line install  using Add-WindowsFeature.

Open Powershell

Paste this line

$IISFeatures = @(“Web-Static-Content”, “Web-Default-Doc”, “Web-Http-Errors”, “Web-Asp-Net”, “Web-Asp-Net45″, “Web-Net-Ext”, “Web-ISAPI-Ext”, “Web-ISAPI-Filter”, “Web-Http-Logging”, “Web-Log-Libraries”, “Web-Request-Monitor”, “Web-Http-Tracing”, “Web-Windows-Auth”, “Web-Filtering”, “Web-IP-Security”, “Web-Stat-Compression”, “Web-Dyn-Compression”, “Web-Mgmt-Console”, “Web-Scripting-Tools”, “Web-Metabase”, “Web-WMI”, “Web-Lgcy-Scripting”,”NET-Framework-Core”)

Run this command

Add-WindowsFeature -Name $IISfeatures -logPath “$Env:ComputerName.log” –Source \\Server\Share\sources

Let me point out the highlighted text in the MSDN article.  You’ll need to mount the Windows Server 2012 and extract the source files (anyone remember extracting the i386 folder for windows 2003/2000, time to put back on the network again Smile)

Assuming you mounted the ISO to the E: drive on your computer.

xcopy e:\sources\sxs\*.* c:\dotnet35 /s

or

xcopy e:\sources\sxs\*.* \\Server\Share\sources /s

After this little adventure, which took a couple hours to figure out, life was good and I could proceed with my Windows Server 2012 testing.  I had ASP.NET 2.0/3.5/4.x on my test server.  I’ve tested on the full GUI Server 2012 and Minimal Install GUI Server Core.   I haven’t went full out for server core without a GUI. 

Happy Testing

Steve Schofield
Microsoft MVP ASP.NET/IIS
http://www.iislogs.com/steveschofield