在 Rider 中重新编译 ASP.NET Core 应用程序而不重复重新运行它

Posted

技术标签:

【中文标题】在 Rider 中重新编译 ASP.NET Core 应用程序而不重复重新运行它【英文标题】:Recompiling an ASP.NET Core Application in Rider without repeatedly rerunning it 【发布时间】:2020-01-07 01:11:29 【问题描述】:

我正在 Rider 中开发一个 ASP.NET Core MVC 应用程序,我经常在其中编辑代码,因此不得不反复手动停止和启动应用程序,这非常不方便。

为了解决这个问题,我尝试了各种方法:

    在运行时重建应用程序不起作用。首先,我收到一个警告: 如果我单击构建,则重新构建解决方案,但任何代码更改都不会反映在正在运行的 Web 服务器中。例如,如果我将字符串 "welcome" 更改为 "goodbye",重建后仍会显示 welcomedotnet watch run。将此命令添加为在预启动配置中运行的外部工具确实可以使基于保存的重新编译工作。但是,这并没有与内置运行器集成。由于dotnet watch run 启动了它自己的网络服务器,Rider 的运行命令从未真正运行过。因此,Rider 没有检测到应用程序已经开始运行,而是认为dotnet watch run 是开始运行之前的一些预启动任务。。由于这个原因,通过调试,我也无法命中任何断点。

有没有其他方法可以在运行 ASP.NET Core 项目时快速重建它?

【问题讨论】:

【参考方案1】:

我认为您所追求的是 Razor 文件编译。这将在编辑视图时重建您的视图,而无需重新启动服务器。

如果你添加这个包引用:

<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" Condition="'$(Configuration)' == 'Debug'" />

并将这个 sn-p 添加到您的启动中:

public IWebHostEnvironment Env  get; set; 

public void ConfigureServices(IServiceCollection services)

    IMvcBuilder builder = services.AddRazorPages();

#if DEBUG
    if (Env.IsDevelopment())
    
        builder.AddRazorRuntimeCompilation();
    
#endif

    // code omitted for brevity

您现在应该可以重建视图。您可以在the docs 中阅读更多相关信息。

编辑:

如果您还想更新所有文件(不仅仅是视图),有几个选项:

    您可以添加 Live Reload 中间件using this package。

    您可以使用dotnet-watch 并在保存项目时重新构建和运行项目。 See this answer 如何做到这一点。

【讨论】:

我知道这一点,但它不只适用于查看文件吗?理想情况下,我一直在寻找可以让我对常规文件也能做到这一点的东西。 正确,这仅用于查看。对于常规文件,即实时重新加载,有这个社区选项github.com/RickStrahl/Westwind.AspnetCore.LiveReload。内置选项正在跟踪 github.com/aspnet/AspNetCore/issues/5456。 除了实时重新加载之外,我还通过adding it as a launch profile 找到了一种将dotnet watch 脚本与Rider 更好地集成的方法。我认为您应该将其添加到您的答案中以确保完整性。谢谢!

以上是关于在 Rider 中重新编译 ASP.NET Core 应用程序而不重复重新运行它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rider IDE 中进行 ASP.NET MVC 视图脚手架?

使用 Rider 在 linux 上调试 ASP.NET Web API 2

Rider 使用 ASP.NET Core 2.1 应用程序冻结

在 ASP.NET vNext 中,为啥没有即时重新编译代码?

如何在 VS2010 中使用 asp.net 重新配置和编译网站到 Framework 3.5?

Rider调试ASP.NET Core时报thread not gc-safe的解决方法