Razor views, pages, controllers, page models, [View components](xref:mvc/views/view-components), and data models can be built into a Razor Class Library (RCL). The RCL can be packaged and reused. Applications can include the RCL and override the views and pages it contains. When a view, partial view, or Razor Page is found in both the web app and the RCL, the Razor markup (*.cshtml* file) in the web app takes precedence.
[View or download sample code](https://github.com/aspnet/Docs/tree/master/aspnetcore/razor-pages/ui-class/samples) ([how to download](xref:tutorials/index#how-to-download-a-sample))
* Name the library (for example, "RazorClassLib") > **OK**. To avoid a file name collision with the generated view library, ensure the library name doesn't end in `.Views`.
For more information, see [dotnet new](/dotnet/core/tools/dotnet-new). To avoid a file name collision with the generated view library, ensure the library name doesn't end in `.Views`.
* NuGet package. See [Creating NuGet packages](/nuget/create-packages/creating-a-package) and [dotnet add package](/dotnet/core/tools/dotnet-add-package) and [Create and publish a NuGet package](/nuget/quickstart/create-and-publish-a-package-using-visual-studio).
* *{ProjectName}.csproj*. See [dotnet-add reference](/dotnet/core/tools/dotnet-add-reference).
## Walkthrough: Create a Razor Class Library project and use from a Razor Pages project
You can download the [complete project](https://github.com/aspnet/Docs/tree/master/aspnetcore/razor-pages/ui-class/samples) and test it rather than creating it. The sample download contains additional code and links that make the project easy to test. You can leave feedback in [this GitHub issue](https://github.com/aspnet/Docs/issues/6098) with your comments on download samples versus step-by-step instructions.
If you haven't downloaded the completed app and would rather create the walkthrough project, skip to the [next section](#create-a-razor-class-library).
# [Visual Studio](#tab/visual-studio)
Open the *.sln* file in Visual Studio. Run the app.
# [.NET Core CLI](#tab/netcore-cli)
From a command prompt in the *cli* directory, build the RCL and web app.
``` CLI
dotnet build
```
Move to the *WebApp1* directory and run the app:
``` CLI
dotnet run
```
------
Follow the instructions in [Test WebApp1](#test)
## Create a Razor Class Library
In this section, a Razor Class Library (RCL) is created. Razor files are added to the RCL.
# [Visual Studio](#tab/visual-studio)
Create the RCL project:
* From the Visual Studio **File** menu, select **New** > **Project**.
`@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers` is required to use the partial view (`<partialname="_Message"/>`). Rather than including the `@addTagHelper` directive, you can add a *_ViewImports.cshtml* file. For example:
``` CLI
dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
```
For more information on viewimports, see [Importing Shared Directives](xref:mvc/views/layout#importing-shared-directives)
* Build the class library to verify there are no compiler errors:
``` CLI
dotnet build RazorUIClassLib
```
The build output contains *RazorUIClassLib.dll* and *RazorUIClassLib.Views.dll*. *RazorUIClassLib.Views.dll* contains the compiled Razor content.
### Use the Razor UI library from a Razor Pages project
When a view, partial view, or Razor Page is found in both the web app and the Razor Class Library, the Razor markup (*.cshtml* file) in the web app takes precedence. For example, add *WebApp1/Areas/MyFeature/Pages/Page1.cshtml* to WebApp1, and Page1 in the WebApp1 will take precedence over Page1in the Razor Class Library.
In the sample download, rename *WebApp1/Areas/MyFeature2* to *WebApp1/Areas/MyFeature* to test precedence.
Copy the *RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml* partial view to *WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml*. Update the markup to indicate the new location. Build and run the app to verify the app's version of the partial is being used.