在ServiceStack Razor视图中获取HttpCompileException(自托管)
本文关键字:HttpCompileException 获取 ServiceStack Razor 视图 | 更新日期: 2023-09-27 18:21:42
ASSEMBLY 1
这是我的项目结构(我提供来自嵌入式资源的内容):
Common_Assembly.dll
Css
Common.css
Views
Shared
_Layout.cshtml
它还有一个名为Model.cs的类,本质上只是:
public class Model
{
public string Title {get; set; }
}
_Layout.cshtml
@model MyNameSpace.Model
<html>
<head>
<script language="javascript" href="css/common.css"></script>
<title>@Model.Title</title>
</head>
<body>
@RenderBody
</body>
</html>
组件2
然后我有了第二个程序集(它引用了上面的程序集),它实际上是web服务的宿主:
Concrete_Assembly.dll
Views
Index.cshtml
它有一个名为IndexResponse
的类,它派生自另一个程序集中的Model
。
public class IndexResponse : Model
{
}
Index.cshtml
@Model MyOtherNameSpace.IndexResponse
<p>Test</p>
现在,问题来了。如果我删除@Model
行,一切都会正常工作,并且我会在另一个DLL的布局页面中看到我的索引页面(我使用自定义VirtualPathProvider在多个DLL中定位资源)。但是,如果我尝试在索引页中使用IndexResponse
作为模型,我会得到一个HttpCompileException
。由于它是由外部组件抛出的,我实际上不知道异常消息是什么(我使用服务堆栈二进制文件)。
起初,我想知道这是否是因为模型类与布局的类不同(尽管它是从布局派生的)。为了测试这一理论,我创建了一个从Model
派生的TestModel
类(放置在公共程序集中),并使用了它——它工作得很好。
这让我相信这是因为IndexResponse
在辅助程序集中,但不能确定,因为我看不到错误。
任何帮助都将不胜感激!
编辑
为了完整起见,这里是实际的WebService方法。我不认为这里有什么问题,因为当我进行其他测试时(使用TestModel
),它运行良好。
public IndexResponse Any(Index index)
{
return new IndexResponse() { Title = "Test Title" };
} // eo Any
编辑2
对所有编辑表示歉意。此外,我是否可以处理这个异常,以便查看错误?如果能捕捉到并显示它,那就太好了——否则,将这些页面开发为嵌入式资源就像拔牙一样:)
编辑3
在遵循了Mythz的一些建议,并将正确的命名空间添加到Razornamespaces配置中之后,我终于控制住了它抛出的错误:
+ $exception {"(0): error CS1704: An assembly with the same simple name 'Concrete_Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null has already been imported. Try removing one of the references or sign them to enable side-by-side."} System.Exception {System.Web.HttpCompileException}
`
如果您还没有,您应该将正在使用的任何程序集添加到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="ServiceStack.Html" />
<add namespace="ServiceStack.Razor" />
<add namespace="ServiceStack.Text" />
<add namespace="ServiceStack.OrmLite" />
<add namespace="Concrete_Assembly" />
<add namespace="Common_Assembly" />
</namespaces>
</pages>
</system.web.webPages.razor>
同时禁用ASP.NET网页:
<appSettings>
<add key="webPages:Enabled" value="false" />
</appSettings>
有关参考,请参阅RazorRockstars Self Host app.config。