我刚刚将一个.NET 5应用程序迁移到了.NET 6,并且正在尝试热重新加载。
当我运行我的应用程序,更改一个值并点击热重新加载按钮(或使用保存时热重新加载选项)时,Visual Studio通知我“代码更改已成功应用”:
尽管如此,这些变化并没有反映在我的应用程序上。我已经使用完整的IIS、IIS Express和dotnet cli运行了这个应用程序,尽管它们之间没有区别。页面根本不会重新加载。
发布于 2021-11-25 22:16:07
我一直在与此作斗争,直到遇到an article by Scott Hanselman,它描述了使用限制性内容安全策略(CSP)可能会导致热重新加载问题。
热重载在.NET 6中的工作方式是,它在结束</body>
标记之前插入一个脚本(旁注:如果没有正文标记,热重载也不会起作用)。此脚本设置到服务器的websocket连接,以侦听作为热重新加载过程的一部分所做的更改。如果您在CSP中指定了ConnectSources的白名单,但该白名单不包含指向您的开发服务器的websockets地址,您将在控制台中收到类似以下错误的信息:
在您的云服务器中添加预期的ConnectSources将会解决控制台中的错误,热重载应该会重新开始工作。注意,我正在使用流行的NWebsec包来设置我的CSP。
var customConnectSources = new List<string>
{
"https://*.signalr.net" // example
};
if (env.IsDevelopment())
{
// make exceptions to allow hot reload to work
customConnectSources.Add("ws://localhost:*");
customConnectSources.Add("wss://localhost:*");
}
app.UseCsp(options => options
.DefaultSources(s => s
.Self())
.ConnectSources(s => s
.Self()
.CustomSources(customConnectSources.ToArray())));
发布于 2021-12-20 19:34:27
我也在努力使热重新加载工作,原因与ajbeaven的答案中的原因相同(ws是不允许‘self’的)。将其添加到index.cshtml或_Layout.cshtml中的部分会有所帮助。此外,如果偶然使用IdentityServer项目,则在SecurityHeaderAttributes.cs中设置CSP,并忽略cshtml文件中的值。
<meta http-equiv="Content-Security-Policy" content="connect-src ws://localhost:*;">
https://stackoverflow.com/questions/70117801
复制相似问题