我正在尝试使用Servicestack和F#。所以,我很成功。但是在尝试用razor引擎进行asp.net托管的时候。我遇到了奇怪的问题。
如果对于default.cshtml,我选择不使用内容进行复制的属性,而不是填充页面,而是进入元数据页面。但是,如果我设置复制,如果更新它将起作用。
但据我所知,这应该是不要只复制,因为编译是内容。如果我们不这样做那么对于cshtml页面中的每个更改都需要重新运行该项目。
现在,这对于F#项目来说也是独一无二的,在C#中它正在运行。所以,我完全不知道在哪里看。顺便说一下,我使用的是3.9.71版本的servciestack。
如果需要进一步的细节,请告诉我。我的项目repo
答案 0 :(得分:4)
您的F#MVC应用程序设置不正确。您正在使用ASP.NET,它应该使用IIS作为其主机。这意味着来自IIS的请求会传递到AppHost中。但是在您的设置中,您使用的是AppHostHttpListenerBase
,这实际上是在创建自己的HTTP侦听器,实际上您已将独立自托管与ASP.NET托管设置混合在一起。
因此,您会遇到将内容复制到输出目录的奇怪情况。那是因为在一个独立的ServiceStack应用程序中,这是要求,它正在寻找错误位置的内容。
尝试使用:
type AppHost =
inherit AppHostBase
new() = { inherit AppHostBase("Hello F# Services", typeof<HelloService>.Assembly) }
override this.Configure container =
...
您应该阅读this article以确保正确设置MVC ASP.NET应用程序。
您仍然希望使用DebugMode = true
来启用ServiceStack以自动获取更改,因此我已将答案中的那部分留下。
跟你所说的有点难,但是如果我正确地解释了它,你说你有一个F#ASP.NET ServiceStack Razor项目,你发现你必须重新运行构建过程每次您对视图进行更改。
我还没有使用F#所以我必须在C#中给出示例,但是你需要将你的AppHost配置设置为DebugMode = true
,以便让ServiceStack自动获取更改,从而赢得每次都必须重新运行构建过程。
SetConfig(new EndpointHostConfig {
DebugMode = true,
});
我在你的代码中注意到这没有设置:
type AppHost() =
inherit AppHostHttpListenerBase("Hello F# Service", typeof<HelloService>.Assembly)
override this.Configure container =
this.Plugins.Add(new RazorFormat())
ignore()
static member start() =
let apphost = new AppHost()
apphost.Init()
有关详细信息,请参阅this documentation中的“自动重新加载已修改视图,布局模板和部分(在调试模式下)”部分。
因此,在调试模式下,我们也会这样做,后台文件系统观察程序监视所有页面,部分和布局模板以进行修改和重新编译,并在运行时自动重新加载它们......