servicestack,servicestack-razor,Architecture,servicestack,Servicestack Razor" /> servicestack,servicestack-razor,Architecture,servicestack,Servicestack Razor" />

Architecture ServiceStack Razor文件位于单独的项目中

Architecture ServiceStack Razor文件位于单独的项目中,architecture,servicestack,servicestack-razor,Architecture,servicestack,Servicestack Razor,我有一个解决方案,包括一个ServiceStack后端,具有常规设置(AppHost、ServiceInterface和ServiceModel),以及一个winforms应用程序和一个使用服务的iOS应用程序 现在我想成为一名网站管理员,我想就如何构建这个网站寻求建议。我希望保持apphost项目的小型化,因为 理想情况下,根级别的AppHost项目应该保持轻量级和 实现免费 因此,我希望将web管理员放在一个单独的项目中,包含所有的.cshtml和内容 这可能吗?不推荐?有什么想法吗 我能想

我有一个解决方案,包括一个ServiceStack后端,具有常规设置(AppHost、ServiceInterface和ServiceModel),以及一个winforms应用程序和一个使用服务的iOS应用程序

现在我想成为一名网站管理员,我想就如何构建这个网站寻求建议。我希望保持apphost项目的小型化,因为

理想情况下,根级别的AppHost项目应该保持轻量级和 实现免费

因此,我希望将web管理员放在一个单独的项目中,包含所有的.cshtml和内容

这可能吗?不推荐?有什么想法吗

我能想到的一些选择是

  • 单页应用程序,让少数
    cshtml
    文件存在于AppHost项目中。这值得学习吗
  • 让单独的项目调用web服务。考虑到它们生活在同一个web服务器上,这不是很无效吗?或者它应该被认为是一种优势,因为它使所有东西都松散耦合

查看有关使用的文档和GitHub存储库,了解如何创建利用已编译Razor视图的嵌入式ServiceStack解决方案。

我想为初学者提供一个更完整的答案:

  • 网站的项目必须已启用。例如,它必须有对
    ServiceStack.Razor
    的引用,因此
    .cshtml
    将被编译

  • 正如@mythz所指出的,添加
    ServiceStack.Razor.BuildTask
    以预编译Razor文件。这是将它们包括在
    loadfromsassemblies
    参数中所必需的

  • 在主AppHost中,指定要在另一个具有
    LoadFromAssembly
    的程序集中找到Razor文件,例如:

        this.Plugins.Add(new RazorFormat { LoadFromAssemblies = { typeof(ActivityServer.Admin.AdminServices).Assembly } });
    
  • 到目前为止,都是关于Razor.cshtml文件的。若要包括服务,例如对于更复杂的视图,只需将其添加到
    AppHost():base(…)
    ,或者如果需要这些服务的前缀,请使用AppHost.RegisterService


  • 需要指出的一点是,外部DLL中的Razor文件没有单独的命名空间,因此外部DLL中的“hello.cshtml”与主AppHost中同名的文件冲突。通过将所有cshtml文件(在外部dll中)放在子文件夹下,这将有所帮助,因为该文件夹将是URL的一部分

    谢谢,这让我达到了我想要的目的,但是在汇编没有编译的时候出现了一些问题,到处都是错误。我不知道SS.Razor也必须在新编译的程序集中被引用,虽然它非常简单,但是VS错误消息已经关闭。在文档中它说“保留最佳开发工作流”。但当我在外部DLL中更改.cshtml文件时,直到我停止调试并重新编译,它才会反映出来。有什么我做错了吗?@sample self-hosting查看在每次构建后复制到
    /bin
    目录的razor视图。有关如何将
    Config.WebHostPhysicalPath
    更改为的信息,请参阅此答案。