Servicestack剃刀页面正在添加到内容中

时间:2014-01-19 04:55:05

标签: f# servicestack f#-3.0 c#-to-f# servicestack-razor

我正在尝试使用Servicestack和F#。所以,我很成功。但是在尝试用razor引擎进行asp.net托管的时候。我遇到了奇怪的问题。

如果对于default.cshtml,我选择不使用内容进行复制的属性,而不是填充页面,而是进入元数据页面。但是,如果我设置复制,如果更新它将起作用。

但据我所知,这应该是不要只复制,因为编译是内容。如果我们不这样做那么对于cshtml页面中的每个更改都需要重新运行该项目。

现在,这对于F#项目来说也是独一无二的,在C#中它正在运行。所以,我完全不知道在哪里看。顺便说一下,我使用的是3.9.71版本的servciestack。

如果需要进一步的细节,请告诉我。我的项目repo

1 个答案:

答案 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中的“自动重新加载已修改视图,布局模板和部分(在调试模式下)”部分。

  

因此,在调试模式下,我们也会这样做,后台文件系统观察程序监视所有页面,部分和布局模板以进行修改和重新编译,并在运行时自动重新加载它们......