Reputation: 2187
According to the documentation, Razor views should, by default, recompile on change on local environments for ASP.NET Core 3.0.
However, my project doesn't do this locally. If I change a view and refresh when I'm debugging locally, the change is not reflected. I have to stop the solution, re-run, and then see the change.
I am doing this on a default ASP.NET Core Web Application template on Visual Studio 2019 with ASP.NET Core 3.0.0 Preview 2 using Razor pages. Any idea if I need to change settings to enable this feature?
Upvotes: 126
Views: 55362
Reputation: 1780
Simpliest way to configure Runtime Compilation for Local Development only is to update launch profiles in launchSettings.json
. This method requires no code changes to configure a project which is running locally (it will not affect your production).
See the official documentation:
- Install the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet package.
- Modify the launch profile environmentVariables section in launchSettings.json:
- Verify
ASPNETCORE_ENVIRONMENT
is set to "Development".- Set
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
to "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".
Example:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:57676",
"sslPort": 44364
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
}
},
"RazorPagesApp": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
}
}
}
}
Upvotes: 7
Reputation: 3034
For ASP.NET Core 3 release version:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0
It can also be enabled conditionally only for local development, quoted from the link:
Runtime compilation can be enabled such that it's only available for local development. Conditionally enabling in this manner ensures that the published output:
Uses compiled views.
Is smaller in size.
Doesn't enable file watchers in production.
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
Env = env;
}
public IWebHostEnvironment Env { get; set; }
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
Upvotes: 78
Reputation: 1905
In .NET Core 3.1, you need disable generation of the views.dll
file.
Add the below code to your .csproj
file (in the root of your project):
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>...</UserSecretsId>
<!-- add from this line: -->
<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
<CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<!-- to this line. -->
</PropertyGroup>
Install the below package from the NuGet Package Manager for the Solution.
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Add the below code to the ConfigureServices
method of your Startup.cs
file:
services.AddMvc().AddRazorRuntimeCompilation();
Or
services.AddControllersWithViews().AddRazorRuntimeCompilation();
Or
services.AddRazorPages().AddRazorRuntimeCompilation();
After this, publish again and run it. It will work.
Upvotes: 13
Reputation: 171
Step 1: Install the below package from NuGet Package Manager for Solution.
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Step 2: Add the below code in ConfigureServices of Startup.cs file
services.AddControllersWithViews().AddRazorRuntimeCompilation();
Save the page and then refresh the client browser.
If you are using Razor then add the code for services.AddRazorPages().AddRazorRuntimeCompilation();
Upvotes: 16
Reputation: 373
Just an added note -- you may want to only conditionally enable this runtime compilation, so that the published output:
Conditionally enable runtime compilation
Upvotes: 6
Reputation: 537
To get runtime Razor Views Compilation back in ASP.NET Core 3.1:
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
NuGet package.Startup.ConfigureServices
method to include a call to AddRazorRuntimeCompilation
. services.AddRazorPages().AddRazorRuntimeCompilation()
;
Upvotes: 20
Reputation: 449
Runtime compilation is enabled using the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
package. To enable runtime compilation, apps must:
Install the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
NuGet
package.
Update the project's Startup.ConfigureServices
method to include a
call to AddRazorRuntimeCompilation
:
services
.AddControllersWithViews()
.AddRazorRuntimeCompilation();
https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0
Upvotes: 28
Reputation: 28290
To get runtime view compilation back in ASP.NET Core
3
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
services.AddMvc().AddRazorRuntimeCompilation()
Microsoft.VisualStudio.Web.CodeGeneration.Design
if there's a version mismatch on the Microsoft.CodeAnalysis.Common
packageUpvotes: 44
Reputation: 1359
OK it looks like it's not supported yet :(
Runtime compilation removed As a consequence of cleaning up the ASP.NET Core shared framework to not depend on Roslyn, support for runtime compilation of pages and views has also been removed in this preview release. Instead compilation of pages and views is performed at build time. In a future preview update we will provide a NuGet packages for optionally enabling runtime compilation support in an app.
You can read more about the issue here https://github.com/aspnet/Announcements/issues/343
Applications that require runtime compilation or re-compilation of Razor files should:
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
package. It'll be available as part of the 3.0.0-preview3 release.ConfigureServices
to include a call to AddMvcRazorRuntimeCompilation
:Upvotes: 69