By [Rick Anderson](https://twitter.com/RickAndMSFT)
See [What's new in ASP.NET Core 2.1](xref:aspnetcore-2.1) for an overview of the new features in ASP.NET Core 2.1.
This article:
* Covers the basics of migrating an ASP.NET Core 2.0 app to 2.1.
* Provides an overview of the changes to the ASP.NET Core web application templates.
A quick way to get an overview of the changes in 2.1 is to:
* Create an ASP.NET Core 2.0 web app named WebApp1.
* Commit the WebApp1 in a source control system.
* Delete WebApp1 and create an ASP.NET Core 2.1 web app named WebApp1 in the same place.
* Review the changes in the 2.1 version.
This article provides an overview on migration to ASP.NET Core 2.1. It does not contain a complete list of all changes needed to migrate to version 2.1. Some projects might require more steps depending on the options selected when the project was created and modifications made to the project.
## Update the project file to use 2.1 versions
Update the *.csproj* project file:
* Change `<TargetFramework>netcoreapp2.0</TargetFramework>` to the 2.1 version, that is `<TargetFramework>netcoreapp2.1</TargetFramework>`.
* Replace the version specified "Microsoft.AspNetCore.All" package reference with the versionless "Microsoft.AspNetCore.App" package reference. You may need to add dependencies that were removed from "Microsoft.AspNetCore.All". See [Migrating from Microsoft.AspNetCore.All to Microsoft.AspNetCore.App](xref:fundamentals/metapackage#migrate) and [Microsoft.AspNetCore.App metapackage](xref:fundamentals/metapackage-app). If you're targetting the .NET Framework:
* Add individual package references instead of a meta package reference.
* Update each package reference to 2.1.
* Remove all references to `<DotNetCliToolReference>` elements for "Microsoft.AspNetCore", "Microsoft.VisualStudio", and "Microsoft.EntityFrameworkCore" packages. These tools have been replaced by global tools.
The following markup shows the template generated 2.0 *.csproj* project file:
[!code-xml[Main](20_21/sample/WebApp20.csproj)]
The following markup shows the template generated 2.1 *.csproj* project file:
* Projects referencing `Microsoft.AspNetCore.All` or `Microsoft.AspNetCore.App` packages, must reference `Microsoft.Net.Sdk.Web` Sdk.
* Projects referencing packages or projects that transitively reference `Microsoft.AspNetCore.All` or `Microsoft.AspNetCore.App`:
* Must reference the `Microsoft.Net.Sdk.Web` Sdk and,
* Must reference the same shared runtime package. For example, if LibraryA references `Microsoft.AspNetCore.App`, any projects referencing it must reference `Microsoft.AspNetCore.App`.
* Executable projects:
* Are projects that contain apps that are launched with `dotnet run`.
* Are applications that run and test projects for applications.
* Executable projects must not specify the version. The Sdk specifies the version implicitly via `<PackageReference Include="Microsoft.AspNetCore.App" />`.
* Referenced projects, that is:
* Projects that aren’t the entry point, and
* The project references `Microsoft.AspNetCore.All` or `Microsoft.AspNetCore.App`.
* Referenced projects must specify a package version.
The new `Main` replaces the call to `BuildWebHost` with [CreateWebHostBuilder](/dotnet/api/microsoft.aspnetcore.mvc.testing.webapplicationfactory-1.createwebhostbuilder). [IWebHostBuilder](/dotnet/api/microsoft.aspnetcore.hosting.iwebhostbuilder) was added to support a new [integration test infrastructure](xref:test/integration-tests).
### Changes to Startup
The following code shows the changes to 2.1 template generated code. All changes are newly added code, except that `UseBrowserLink` has been removed:
ASP.NET Core 2.1 provides [ASP.NET Core Identity](xref:security/authentication/identity) as a [Razor Class Library](xref:razor-pages/ui-class). If you have not made substantial changes to the 2.0 template generated Identity code, consider the following upgrade approach: