我正在最新版本 2.2 上构建 .NET Core MVC。我对 CSHTML 文件进行更改并刷新页面时遇到问题,我的更改未反映在浏览器中。我必须重新启动项目才能看到我的更改。这种情况已经发生了一段时间,所以我不确定是什么变化导致了这个问题。
我尝试使用 chrome 的“空缓存和硬重载”以及其他浏览器无济于事。这发生在使用 Visual Studio for Mac 和 VS Code 的 Windows 和 Mac 上
在默认的 .Net Core 项目中,它工作正常,所以它一定是我的项目中的某些东西在此过程中发生了变化。我想知道我需要从哪里开始调试这个问题?我已尝试将 Startup.cs
和 Program.cs
中的几乎所有内容都注释掉,但没有解决。
在 ASP.NET Core 3.0 及更高版本中,RazorViewEngineOptions.AllowRecompilingViewsOnFileChange
不可用。
惊讶于在应用程序运行时刷新视图不起作用,我发现了以下解决方案:
将 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包添加到项目中 在 Startup.cs 中添加以下内容: services.AddControllersWithViews().AddRazorRuntimeCompilation();
这是好奇的full explanation。
似乎在 ASP.NET Core 2.2 中进行了更改(我找不到有关此更改的任何公告)。如果您没有在“开发”环境中显式运行,则编译 Razor 视图,您将看不到对 .cshtml 所做的任何更改
但是,您可以使用 Startup 类中的一些配置来关闭它,如下所示。
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
对于 ASP.NET Core 3.0 及更高版本,请参阅 Alexander Christov 的answer。
MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes()
知道此异常的含义吗?所有其他页面加载正常。只有当我编辑文件并刷新时,我才会收到此错误
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
我刚刚使用最新的 ASP.NET MVC Core 3.1 模板创建了一个新项目,并更改了以下内容以启用运行时重新编译以进行调试:
参考 NuGet 包 - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。
Startup.cs - ConfigureServices(IServiceCollection 服务)WAS:
// stuff...
services.AddControllersWithViews();
// more stuff...
现在:
// stuff...
var mvcBuilder = services.AddControllersWithViews();
#if DEBUG
mvcBuilder.AddRazorRuntimeCompilation();
#endif
// more stuff...
除了 Alexander Christov's answer,从 ASP.NET Core 3.1 开始,您可以为开发环境 without changes to the Startup
file 启用视图编译:
安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。设置下一个环境变量(例如通过 launchSettings.json 中的 environmentVariables 部分): ASPNETCORE_ENVIRONMENT 为“开发”。 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 到“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation”。
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
从 v5.x 更新到 v6.x,否则您将无法看到 Razor 视图或页面中的更改使他们。
你应该添加这个:
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 文件转到 void 方法 ConfigureServices 添加行: services.AddControllersWithViews().AddRazorRuntimeCompilation();你完成了
重新运行并查看。现在您可以刷新视图或页面。
首先使用 nuget 管理器安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation,然后将以下代码添加到您的 startup.cs
services.AddRazorPages().AddRazorRuntimeCompilation();
当视图在单独的项目中时,下面帮助了我。
if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
services.AddMvc().AddRazorOptions(o => {
o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
});
}
通过添加 ASPNETCORE_ENVIRONMENT=Development
环境变量,我能够在 Rider 中解决这个问题。
有两种方法可以解决此问题:
1.检查您的.sln文件所在文件夹的权限。文件访问权限可能有问题,因为Visual Studio可能在IIS Express服务器运行时无法访问文件,因此每次您都反映新的.cshtml更改需要重新启动服务器,所以我建议通过以下方式编辑文件夹访问权限:
右键单击文件夹->属性->安全->单击编辑按钮->检查所有选项->保存。
重新启动 Visual Studio 以查看更改。
如果这不起作用,则使用 2 选项。
2.在您的项目中的 startup.cs 文件中,在方法中添加以下行 ConfigureServices():
services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
你确定你使用的是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
我从 .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" />
(您的版本可能不同)
我在使用 .NET 6 MVC Web App 时遇到了同样的问题。
我从 NuGet Package Manger 安装了 Microsoft.AspNetCore.Mvc.Razor.Runtime.Compilation 然后在之后添加了 .AddRazorRuntimeCompilation();
builder.services.AddControllersWithViews();
所以它看起来像这样
builder.services.AddControllersWithViews().AddRazorRuntimeCompilation();
它奏效了!
希望这有帮助。
在 Visual Studio 2022 Preview 中,似乎有一个名为 Hot Reload 的选项用于此目的。
https://i.stack.imgur.com/LZyD4.png
它似乎在 Visual Studio 2019 中也可用。
借助 Hot Reload,您现在可以在应用程序运行时修改应用程序托管的源代码,而无需手动暂停或点击断点。只需在您的应用程序运行时进行受支持的更改,并在我们新的 Visual Studio 体验中使用“应用代码更改”按钮来应用您的编辑。
https://devblogs.microsoft.com/dotnet/introducing-net-hot-reload/
不定期副业成功案例分享