.NET Core MVC 页面更改后不刷新
.NET Core MVC Page Not Refreshing After Changes
我正在最新版本 2.2 上构建 .NET Core MVC。当我更改 CSHTML 文件并刷新页面时遇到问题,我的更改没有反映在浏览器中。我必须重新启动项目才能看到我的更改。这种情况已经发生了一段时间,所以我不确定是什么变化导致了这个问题。
我试过使用 chrome 的 "Empty Cache and Hard Reload" 以及其他浏览器都无济于事。这发生在 Windows 和 Mac 上,同时使用 Visual Studio for Mac 和 VS Code
在默认的 .Net Core 项目中,它工作正常,所以它一定是我的项目中的一些东西在过程中发生了变化。我想知道我需要从哪里开始调试这个问题?我已经尝试注释掉 Startup.cs
和 Program.cs
中的几乎所有内容,但没有解决。
您确定您使用的是 2.2 吗?检查你的 csproj,因为它可能是这个错误 https://github.com/aspnet/Razor/issues/2466
您可以尝试关闭 RazorCompileOnBuild
更多信息 https://docs.microsoft.com/en-us/aspnet/core/razor-pages/sdk?view=aspnetcore-2.1#properties
似乎在 ASP.NET Core 2.2 中进行了更改(我找不到有关此更改的任何公告)。如果您没有在 'Development' 环境中明确 运行,那么会编译 Razor 视图,您将看不到对 .cshtml
所做的任何更改
但是,您可以使用启动 class 中的一些配置关闭此功能,如下所示。
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
对于 ASP.NET Core 3.0 及更高版本,请参阅 Alexander Christov 的 。
使用 .net core 2.2 运行 应用程序和命令 dotnet watch run
项目在每次更改后重新启动
当视图在单独的项目中时,以下帮助了我。
if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
services.AddMvc().AddRazorOptions(o => {
o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
});
}
在 ASP.NET Core 3.0 及更高版本 中,RazorViewEngineOptions.AllowRecompilingViewsOnFileChange
不可用。
令人惊讶的是,当应用程序正在 运行 时刷新视图不起作用,我发现了以下解决方案:
添加 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包到
项目
在Startup.cs
中添加以下内容:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
这是 full explanation 好奇的。
我能够通过添加 ASPNETCORE_ENVIRONMENT=Development
环境变量在 Rider 中解决这个问题。
有两种方法可以解决这个问题:
1。检查您的.sln 文件所在的文件夹的权限 present.There 可能是文件访问权限有问题,因为当 IIS express 服务器为 运行 时 Visual studio 可能无法访问文件,因此要反映每次需要重新启动服务器时,新的 .cshtml 都会更改,因此我建议通过以下方式编辑文件夹访问权限:
右键单击文件夹->属性->安全->单击编辑按钮->勾选所有选项->保存.
重新启动 Visual studio 以查看更改。
如果这不起作用,则使用 2 选项。
2。在 startup.cs 文件中的项目中,将此添加到 ConfigureServices() 在方法中:
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
我刚刚使用最新的 ASP.NET MVC Core 3.1 模板创建了一个新项目,我更改了以下内容以启用调试的运行时重新编译:
参考 NuGet 包 - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
Startup.cs - ConfigureServices(IServiceCollection 服务)是:
// stuff...
services.AddControllersWithViews();
// more stuff...
现在:
// stuff...
var mvcBuilder = services.AddControllersWithViews();
#if DEBUG
mvcBuilder.AddRazorRuntimeCompilation();
#endif
// more stuff...
你应该添加这个:
services.AddControllersWithViews();
到 ConfigureService 方法。
注意以下代码在 ASP.NET Core 3.1 中不可用:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
对于使用 Net core 3.0 或更高版本的用户
转到工具 → Nuget 包管理器 → 管理解决方案的 nuget 包
移动到浏览选项卡以从 Internet 浏览
搜索 RuntimeCompilation
点击 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
将它安装在你想要的项目上当前的稳定版本
打开Startup.cs文件
转到无效方法 ConfigureServices
添加行:services.AddControllersWithViews().AddRazorRuntimeCompilation();
你完成了
重新运行看看。现在您可以刷新您的视图或页面。
除了, since ASP.NET Core 3.1 you can enable the view compilation for development environment without changes to the Startup
file:
- 安装
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
NuGet 包。
- 设置下一个环境变量(例如通过 launchSettings.json 中的 environmentVariables 部分):
ASPNETCORE_ENVIRONMENT
到“发展”。
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
到“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation”。
首先使用 nuget 管理器安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
之后将以下代码添加到您的 startup.cs
services.AddRazorPages().AddRazorRuntimeCompilation();
我从 .net Core 3 升级到 .net 5.0 时遇到了类似的问题
问题是由于我们无法更改的 Telerik 控件中的旧依赖项。
已通过更改 .csproj 文件中的引用修复
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.8.0" />
至
<PackageReference Include="Microsoft.CodeAnalysis" Version="3.8.0" />
(您的版本可能不同)
在 Visual Studio 2022 预览版中,似乎有一个名为 Hot Reload 的选项用于此目的。
它似乎也在 Visual Studio 2019 年上市。
With Hot Reload you can now modify your apps managed source code while
the application is running, without the need to manually pause or hit
a breakpoint. Simply make a supported change while your app is running
and in our new Visual Studio experience use the “apply code changes”
button to apply your edits.
https://devblogs.microsoft.com/dotnet/introducing-net-hot-reload/
我正在最新版本 2.2 上构建 .NET Core MVC。当我更改 CSHTML 文件并刷新页面时遇到问题,我的更改没有反映在浏览器中。我必须重新启动项目才能看到我的更改。这种情况已经发生了一段时间,所以我不确定是什么变化导致了这个问题。
我试过使用 chrome 的 "Empty Cache and Hard Reload" 以及其他浏览器都无济于事。这发生在 Windows 和 Mac 上,同时使用 Visual Studio for Mac 和 VS Code
在默认的 .Net Core 项目中,它工作正常,所以它一定是我的项目中的一些东西在过程中发生了变化。我想知道我需要从哪里开始调试这个问题?我已经尝试注释掉 Startup.cs
和 Program.cs
中的几乎所有内容,但没有解决。
您确定您使用的是 2.2 吗?检查你的 csproj,因为它可能是这个错误 https://github.com/aspnet/Razor/issues/2466
您可以尝试关闭 RazorCompileOnBuild
更多信息 https://docs.microsoft.com/en-us/aspnet/core/razor-pages/sdk?view=aspnetcore-2.1#properties
似乎在 ASP.NET Core 2.2 中进行了更改(我找不到有关此更改的任何公告)。如果您没有在 'Development' 环境中明确 运行,那么会编译 Razor 视图,您将看不到对 .cshtml
所做的任何更改但是,您可以使用启动 class 中的一些配置关闭此功能,如下所示。
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
对于 ASP.NET Core 3.0 及更高版本,请参阅 Alexander Christov 的
使用 .net core 2.2 运行 应用程序和命令 dotnet watch run
项目在每次更改后重新启动
当视图在单独的项目中时,以下帮助了我。
if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
services.AddMvc().AddRazorOptions(o => {
o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
});
}
在 ASP.NET Core 3.0 及更高版本 中,RazorViewEngineOptions.AllowRecompilingViewsOnFileChange
不可用。
令人惊讶的是,当应用程序正在 运行 时刷新视图不起作用,我发现了以下解决方案:
添加 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包到 项目
在
Startup.cs
中添加以下内容:services.AddControllersWithViews().AddRazorRuntimeCompilation();
这是 full explanation 好奇的。
我能够通过添加 ASPNETCORE_ENVIRONMENT=Development
环境变量在 Rider 中解决这个问题。
有两种方法可以解决这个问题:
1。检查您的.sln 文件所在的文件夹的权限 present.There 可能是文件访问权限有问题,因为当 IIS express 服务器为 运行 时 Visual studio 可能无法访问文件,因此要反映每次需要重新启动服务器时,新的 .cshtml 都会更改,因此我建议通过以下方式编辑文件夹访问权限:
右键单击文件夹->属性->安全->单击编辑按钮->勾选所有选项->保存.
重新启动 Visual studio 以查看更改。
如果这不起作用,则使用 2 选项。
2。在 startup.cs 文件中的项目中,将此添加到 ConfigureServices() 在方法中:
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
我刚刚使用最新的 ASP.NET MVC Core 3.1 模板创建了一个新项目,我更改了以下内容以启用调试的运行时重新编译:
参考 NuGet 包 - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
Startup.cs - ConfigureServices(IServiceCollection 服务)是:
// stuff...
services.AddControllersWithViews();
// more stuff...
现在:
// stuff...
var mvcBuilder = services.AddControllersWithViews();
#if DEBUG
mvcBuilder.AddRazorRuntimeCompilation();
#endif
// more stuff...
你应该添加这个:
services.AddControllersWithViews();
到 ConfigureService 方法。
注意以下代码在 ASP.NET Core 3.1 中不可用:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
对于使用 Net core 3.0 或更高版本的用户
转到工具 → Nuget 包管理器 → 管理解决方案的 nuget 包
移动到浏览选项卡以从 Internet 浏览
搜索 RuntimeCompilation 点击 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
将它安装在你想要的项目上当前的稳定版本
打开Startup.cs文件
转到无效方法 ConfigureServices
添加行:
services.AddControllersWithViews().AddRazorRuntimeCompilation();
你完成了
重新运行看看。现在您可以刷新您的视图或页面。
除了Startup
file:
- 安装
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
NuGet 包。 - 设置下一个环境变量(例如通过 launchSettings.json 中的 environmentVariables 部分):
ASPNETCORE_ENVIRONMENT
到“发展”。ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
到“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation”。
首先使用 nuget 管理器安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 之后将以下代码添加到您的 startup.cs
services.AddRazorPages().AddRazorRuntimeCompilation();
我从 .net Core 3 升级到 .net 5.0 时遇到了类似的问题
问题是由于我们无法更改的 Telerik 控件中的旧依赖项。
已通过更改 .csproj 文件中的引用修复
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.8.0" />
至
<PackageReference Include="Microsoft.CodeAnalysis" Version="3.8.0" />
(您的版本可能不同)
在 Visual Studio 2022 预览版中,似乎有一个名为 Hot Reload 的选项用于此目的。
它似乎也在 Visual Studio 2019 年上市。
With Hot Reload you can now modify your apps managed source code while the application is running, without the need to manually pause or hit a breakpoint. Simply make a supported change while your app is running and in our new Visual Studio experience use the “apply code changes” button to apply your edits.
https://devblogs.microsoft.com/dotnet/introducing-net-hot-reload/