Changing a .NET Core Application from Framework-Dependent to Self-Contained with Visual Studio 2017

This article provides a sample tutorial on how to change a Framework-Dependent .NET Core application to a Self-Contained one (i.e. all the assemblies are included) for Visual Studio 2017.
 
1) Launch Visual Studio.
2) Select File -> New -> Project (CTRL-SHIFT-N)
3) In the New Project window, select .NET Framework 4.6 or higher, choose a programming language, select Web, then ASP.NET Core Application (.NET Core), give your project a name and click on OK.
 
 
4) In the next window, select .NET Core in the left drop-down box, the ASP.NET Core version in right drop-down box, highlight Web Application and click on the OK button.
 
 
5) Open the .csproj file in your project by right clicking on it in the Solution Explorer window and then selecting it.
 
 
6) Add the Runtime ID to the PropertyGroup section.  A complete list of Runtime IDs can be found here.  Or use the guide below.
 
DiscountASP
 
    Windows 2012
 
    <RuntimeIdentifier>win8-x64</RuntimeIdentifier>
 
    Windows 2012 R2
 
    <RuntimeIdentifier>win81-x64</RuntimeIdentifier>
 
    Windows 2016
 
    <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
 
Everleap
 
    <RuntimeIdentifier>win8-x86</RuntimeIdentifier>
 
 
7) Go to Tools -> NuGet Package Manger -> Package Manager Console to open the console window at the bottom.
 
8) In the console window, type in "dotnet restore" and hit enter.  Wait for it to finish.
 
9) Rebuild your project (CTRL-SHIFT-B)
 
Now, you are ready to deploy your solution to the platform of your choice without having the need for certain assemblies to be installed on the server.  Deploying this way avoids versioning issues (i.e. a certain .NET Core version to be installed on the server).
 
Note: A Self-Contained ASP.NET Core application does require more memory to run because it is loading all the assemblies required by the version.  One way to reduce the memory usage is to change the garbage collection mode from server to workstation by adding the <ServerGarbageCollection> element in the ASPNETCore.csproj file and setting it to "false".
 
<PropertyGroup> 
    <ServerGarbageCollection>false</ServerGarbageCollection>
</PropertyGroup>
Addendum:  In the newer versions of Visual Studio 2017, you may also see this when you try to publish your application using Web Deploy and configure the Settings:
 
 
Make sure you select "Self-Contained" as the Deployment Mode and select the correct Target Runtime.