Running ASP.NET Core applications on Windows Subsystem for Linux

Windows 10 has something called Windows Subsystem for Linux and this something enables us to run Linux applications on Windows 10 using Linux without need for Hyper-V or other virtual machines. When building multi-platform applications like my open-source TemperatureStation solution then having Linux right there for testing comes very handy. This blog post shows how to get Linux running on Windows, how to install .NET Core and how to run web applications on Linux.

NB! I have Windows 10 Fall Creators Update and this post is written based on this. In general, same steps apply to other Windows 10 versions with some minor differences.

Setting up Linux on Windows 10

First thing is to enable Windows Subsystem for Linux. It doesn’t install Linux but gets Windows ready for it. Linux support is Windows feature and it must be activated from Windows Features dialog.

Enable Windows Subsystem for Linux

After installing the feature Windows needs restart.

As Windows is ready to host Linux now it’s time to install one. Windows 10 Fall Creators Update supports more than one Linux. I opened Store app and installer Ubuntu Linux from there.

Ubuntu Linux in Windows Store

It takes time to get things up and running as after installation there are some configuring needed. User is asked for username and password and everything else is done by Linux from this point. Just wait until it gets done.

Running Linux on Windows

After installing Linux it is possible to use Windows 10 search to run it.

Search for Ubuntu on Windows

Those who need to run it frequently can also pin Ubuntu to taskbar or start menu.

Installing .NET Core

As I installed Ubuntu Linux then .NET Core installation commands here are for Ubuntu 16 that came from Windows Store.

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get update
sudo apt-get install dotnet-sdk-2.0.2

It takes some minutes to get .NET Core installed as after installation it also initializes things.

Running application from local disk

Linux on Windows uses its own file system and disks on machine are visible through mounting. The following screenshot shows how I moved to project folder on test machine and ran ASP.NET Core application. It’s the same folder where I build application on Visual Studio.

ASP.NET Core application running on Linux on Windows

And here is the web front-end of my TemperatureStation solution served by Linux on Windows.

TemperatureStation

NB! I have experienced some issues this far. Sometimes after running ASP.NET Core web application on Ubuntu it’s not possible to close terminal. When closing it from Task Manager then on next run terminal window opens but nothing happens there. In case of any issues please report problems to Windows team using Feedback app.

Wrapping up

Windows subsystem for Linux is easy to enable and install. It makes Linux available on Windows without hardware level virtualization and there’s no need to install Hyper-V or some other virtualization platform. When building multi-platform apps it is handy to have Linux environment available to test and try application quickly. Although I faced few issues when working with .NET Core on Linux this way these issues were not show stoppers and I got my tasks done. Those who build multi-platform apps should give a Linux on Windows a good try.

Gunnar Peipman

Gunnar Peipman is ASP.NET, Azure and SharePoint fan, Estonian Microsoft user group leader, blogger, conference speaker, teacher, and tech maniac. Since 2008 he is Microsoft MVP specialized on ASP.NET.

    3 thoughts on “Running ASP.NET Core applications on Windows Subsystem for Linux

    • Pingback:The Morning Brew - Chris Alcock » The Morning Brew #2457

    • November 7, 2017 at 6:08 am
      Permalink

      This is the Republic of Korea. I would like to translate your blog into a blog. I would like to ask you for permission. Of course, I left the source and translated the original text.

    • November 7, 2017 at 6:10 am
      Permalink

      Please feel free to translate and publish my blog posts under condition that there is link back to my original blog post and it is clearly seen where content originates.

    Leave a Reply

    Your email address will not be published. Required fields are marked *