4

我正在尝试将 Servicestack 与 F# 一起使用。所以,到目前为止,我是成功的。但是在尝试使用 razor 引擎通过 asp.net 托管来解决问题时。我遇到了奇怪的问题。

如果对于 default.cshtml,我选择了不与内容一起编译的属性,而不是页面不会被填充,它将进入元数据页面。但是,如果我设置为较新的复制,它将起作用。

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

现在,这也是 F# 项目所独有的,在 C# 中它正在工作。所以,我完全不知道在哪里看。顺便说一句,我正在使用 3.9.71 版本的 servciestack。

如果需要任何进一步的细节,请告诉我。我的项目回购

4

1 回答 1

4

更新:

您的应用程序设置不正确

您的 F# MVC 应用程序未正确设置。您正在使用应该使用 IIS 作为其主机的 ASP.NET。这意味着来自 IIS 的请求被传递到 AppHost。但是,在您使用的设置中,AppHostHttpListenerBase这实际上是在创建它自己的 HTTP 侦听器,本质上您已经将独立自托管与 ASP.NET 托管设置混合在一起。

结果,您遇到了必须将内容复制到输出目录的奇怪情况。这是因为在独立的 ServiceStack 应用程序中,这是要求,它在错误的位置寻找内容。

尝试使用这个:

type AppHost =
    inherit AppHostBase
    new() = { inherit AppHostBase("Hello F# Services", typeof<HelloService>.Assembly) }
    override this.Configure container =
    ...

您应该阅读本文以确保您已正确设置 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()

有关详细信息,请参阅本文档中的“自动重新加载修改后的视图、布局模板和部分(在调试模式下)”部分。

因此,在调试模式下,我们还将执行此操作,其中后台文件系统观察程序监视所有页面、部分和布局模板以进行修改和重新编译并即时自动重新加载它们......

于 2014-01-19T11:57:26.107 回答