ServiceStack Razor视图没有编译
我已经成功地在自助式服务中实现了Razor Viewpages,页面完美呈现,直到我更新到3.9.56。 这些视图在一个Windows窗体应用程序中进行了测试,还有一个Windows窗体客户机将会使用该服务的json响应。 这仍然是完美的,但现在当我测试Razor Views时,我在请求一个页面时不断收到以下异常:
ERROR: Error occured while Processing Request: [HttpCompileException] c:UsersCornelAppDataLocalTemp2msjdedu.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:UsersCornelAppDataLocalTemp2msjdedu.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 Views和页面正确呈现。 两个项目都具有相同的引用,为测试框架上的Windows窗体组件引用免除。 这两个项目都是在单独的程序集中从同一管理类启动AppHost,并且所有视图都已发布。
配置文件中的唯一区别是Windows窗体测试框架中的<userSettings>
部分。
[编辑]
当我将@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
。 替代在MyApp.Host.exe.config
中查找默认导入,ServiceStack会在包含AppHost的DLL的配置文件(在本例中为MyApp.dll.config)中MyApp.dll.config
。 问题是,这个配置文件不会在构建时自动复制到MyApp.Host
的bin文件夹中。
解决方案相对简单:在MyApp.Host
的后期构建事件中添加类似于以下内容的MyApp.Host
:
copy /y $(SolutionDir)MyAppapp.config $(TargetDir)MyApp.dll.config
编辑:您也可以通过编程方式添加导入(请参阅在ServiceStack Razor视图(自托管)中获取HttpCompileException):
EndpointHostConfig.RazorNamespaces.Add("ServiceStack.Razor");
EndpointHostConfig.RazorNamespaces.Add("MyApp");
EndpointHostConfig.RazorNamespaces.Add("MyApp.Services");
SetConfig(new EndpointHostConfig
{
DefaultRedirectPath = "/Home",
});
链接地址: http://www.djcxy.com/p/65511.html