---
title: ASP.NET Core Razor SDK
author: Rick-Anderson
description: Learn how Razor Pages in ASP.NET Core makes coding page-focused scenarios easier and more productive than using MVC.
manager: wpickett
monikerRange: '>= aspnetcore-2.1'
ms.author: riande
ms.date: 4/12/2018
ms.prod: asp.net-core
ms.technology: aspnet
ms.topic: content
uid: mvc/razor-pages/sdk
---
# ASP.NET Core Razor SDK
By [Rick Anderson](https://twitter.com/RickAndMSFT)
[!INCLUDE[](~/includes/2.1.md)]
The [!INCLUDE[](~/includes/2.1-SDK.md)] includes the `Microsoft.NET.Sdk.Razor` MSBuild SDK (Razor SDK). The Razor SDK:
* Standardizes the experience around building, packaging, and publishing projects containing [Razor](xref:mvc/views/razor) files for ASP.NET Core MVC-based projects.
* Includes a set of predefined targets, properties, and items that allow customizing the compilation of Razor files.
## Prerequisites
[!INCLUDE[](~/includes/2.1-SDK.md)]
## Using the Razor SDK
Most web apps don't need to expressly reference the Razor SDK.
To use the Razor SDK to build class libraries containing Razor views or Razor Pages:
* Use `Microsoft.NET.Sdk.Razor` instead of `Microsoft.NET.Sdk`:
```xml
...
```
* Typically a package reference to `Microsoft.AspNetCore.Mvc` is required to bring in additional dependencies required to build and compile Razor Pages and Razor views. At minimum, your project needs to add package references to:
* `Microsoft.AspNetCore.Razor.Design`
* `Microsoft.AspNetCore.Mvc.Razor.Extensions`
The preceding packages are included in `Microsoft.AspNetCore.Mvc`. The following markup shows a basic *.csproj* file that uses the Razor SDK to build Razor files for an ASP.NET Core Razor Pages app:
[!code-xml[Main](sdk/sample/RazorSDK.csproj)]
### Properties
The following properties control the Razor's SDK behavior as part of a project build:
* `RazorCompileOnBuild` : When `true`, compiles and emits the Razor assembly as part of building the project. Defaults to `true`.
* `RazorCompileOnPublish` : When `true`, compiles and emits the Razor assembly as part of publishing the project. Defaults to `true`.
The following properties and items are used to configure inputs and output to the Razor SDK:
| Items | Description |
| ------------ | ------------- |
| RazorGenerate | Item elements (*.cshtml* files) that are inputs to code generation targets. |
| RazorCompile | Item elements (.cs files) that are inputs to Razor compilation targets. Use this ItemGroup to specify additional files to be compiled in to the Razor assembly. |
| RazorTargetAssemblyAttribute | Item elements used to code generate attributes for the Razor assembly. For example:
` `Include="System.Reflection.AssemblyMetadataAttribute"`
` _Parameter1="BuildSource" _Parameter2="https://docs.asp.net/">` |
| RazorEmbeddedResource | Item elements added as embedded resources to the generated Razor assembly |
| Property | Description |
| ------------ | ------------- |
| RazorTargetName | File name (without extension) of the assembly produced by Razor. |
| RazorOutputPath | The Razor output directory. |
| RazorCompileToolset | Used to determine the toolset used to build the Razor assembly. Valid values are `Implicit`, , and `PrecompilationTool`. |
| EnableDefaultContentItems | When `true`, includes certain file types, such as *.cshtml* files, as content in the project. When referenced via Microsoft.NET.Sdk.Web, also includes all files under *wwwroot*, and config files. |
| EnableDefaultRazorGenerateItems | When `true`, includes *.cshtml* files from `Content` items in `RazorGenerate` items. |
| GenerateRazorTargetAssemblyInfo | When `true`, generates a *.cs* file containing attributes specified by `RazorAssemblyAttribute` and includes it in the compile output. |
| EnableDefaultRazorTargetAssemblyInfoAttributes | When `true`, adds a default set of assembly attributes to `RazorAssemblyAttribute`. |
| CopyRazorGenerateFilesToPublishDirectory | When `true`, copies RazorGenerate items (*.cshtml*) files to the publish directory. Typically Razor files are not needed for a published application if they participate in compilation at build-time or publish-time. Defaults to `false`. |
| CopyRefAssembliesToPublishDirectory | When `true`, copy reference assembly items to the publish directory. Typically reference assemblies are not needed for a published application if Razor compilation occurs at build-time or publish-time. Set to `true`, if your published application requires runtime compilation, for example, modifies cshtml files at runtime, or uses embedded views. Defaults to `false`. |
| IncludeRazorContentInPack | When `true`, all Razor content items (*.cshtml* files) will be marked for inclusion in the generated NuGet package. Defaults to `false`. |
| EmbedRazorGenerateSources | When `true`, adds RazorGenerate (*.cshtml*) items as embedded files to the generated Razor assembly. Defaults to `false`. |
| UseRazorBuildServer | When `true`, uses a persistent build server process to offload code generation work. Defaults to the value of `UseSharedCompilation`. |
### Targets
The Razor SDK defines two primary targets:
* `RazorGenerate` - Code generates *.cs* files from RazorGenerate item elements. Use `RazorGenerateDependsOn` property to specify additional targets that can run before or after this target.
* `RazorCompile` - Compiles generated *.cs* files in to a Razor assembly. Use `RazorCompileDependsOn` to specify additional targets that can run before or after this target.