c# - ServiceStack Razor View 未编译

标签 c# rest razor servicestack

我已经在自托管服务中成功实现了 Razor Viewpages,在我更新到 3.9.56 之前,页面呈现完美。这些 View 在一个 Windows 窗体应用程序以及一个 Windows 窗体客户端中进行了测试,该客户端将使用来自服务的 json 响应。这仍然可以正常工作,但是现在当我测试 Razor Views 时,我在请求页面时不断收到以下异常:

ERROR: Error occured while Processing Request: [HttpCompileException] c:\Users\Cornel\AppData\Local\Temp\2msjdedu.0.cs(24): error CS0246: The type or namespace name 'ViewPage' could not be found (are you missing a using directive or an assembly reference?), Exception: c:\Users\Cornel\AppData\Local\Temp\2msjdedu.0.cs(24): error CS0246: The type or namespace name 'ViewPage' could not be found (are you missing a using directive or an assembly reference?)

我构建了一个小型控制台应用程序来托管服务和 Razor View ,并正确呈现页面。这两个项目具有相同的引用,但测试框架上的 Windows 窗体程序集引用除外。这两个项目都从单独程序集中的同一管理类启动 AppHost,并且所有 View 都已发布。

配置文件中的唯一区别是 <userSettings> Windows 窗体测试框架部分。

[编辑]

当我将@inherits ViewPage 更改为@inherits ServiceStack.Razor.ViewPage 时,一切都按预期工作

最佳答案

这个问题快把我逼疯了。我刚刚找到解决方案:ServiceStack.Razor 应用程序的 app.config 包含如下部分:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="ServiceStack.Razor.ViewPage">
      <namespaces>
        <add namespace="System.Linq" />
        <add namespace="ServiceStack.Html" />
        <add namespace="ServiceStack.Razor" />
        <add namespace="ServiceStack.Text" />
        <add namespace="ServiceStack.OrmLite" />
        <add namespace="MyApp" />
        <add namespace="MyApp.Services" />
     </namespaces>
   </pages>
</system.web.webPages.razor>

这些是所有 Razor 模板的默认命名空间导入。当应用程序位于单独的 DLL 中时会出现问题,就像您的示例一样。假设您有一个名为 MyApp.Host 的控制台应用程序项目,它引用了 MyApp。 ServiceStack 不是在 MyApp.Host.exe.config 中查找默认导入,而是在包含 AppHost 的 DLL 的配置文件中查找它们,在本例中为 MyApp.dll.config 。问题是,此配置文件在构建时不会自动复制到 MyApp.Host 的 bin 文件夹中。

解决方法比较简单:在MyApp.Host的构建后事件中添加类似下面的内容:

copy /y $(SolutionDir)MyApp\app.config $(TargetDir)MyApp.dll.config

编辑:您还可以通过编程方式添加导入(请参阅 Getting a HttpCompileException in ServiceStack Razor view (Self hosted)):

EndpointHostConfig.RazorNamespaces.Add("ServiceStack.Razor");
EndpointHostConfig.RazorNamespaces.Add("MyApp");
EndpointHostConfig.RazorNamespaces.Add("MyApp.Services");
SetConfig(new EndpointHostConfig
{
    DefaultRedirectPath = "/Home",
});

关于c# - ServiceStack Razor View 未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010199/

相关文章:

c# - Razor 在尝试显示 Item 时获取空引用

c# - WPF:从不同的 UserControls 访问 ObservableCollection

来自外部数据源的 "no data available"的 HTTP 状态代码

rest - Spring Boot REST - 公开与安全和不安全相同的服务

javascript - 意外字符 ('A'(代码 65)): was expecting a colon to separate field name and value\n

javascript - JsonConvert.SerializeObject 的输出是否需要在 Razor View 中进行编码?

css - .cshtml 文件中 &lt;style&gt; 标记中的 @media 规则引发错误

c# - 为什么 Int64 和 UInt64 大小相同

C# 'ref' 关键字,性能

将控件添加到窗体时,应用程序的 C# 加载项(通过 COM)卡住?