在ServiceStack Razor视图中获取HttpCompileException(自托管)

时间:2013-07-09 09:39:32

标签: c# .net servicestack razor-2

汇编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(I use a custom VirtualPathProvider to locate resources across multiple Dlls)的布局页面中看到我的索引页面。但是,如果我尝试在索引页面中使用IndexResponse作为模型,我会得到HttpCompileException。由于它是由外部组件抛出的,我实际上并不知道异常消息是什么(我使用服务堆栈二进制文件)。

起初我想知道是不是因为模型类与布局的类不同(即使它是从它派生的)。为了测试这个理论,我创建了一个TestModel类,它派生自Model(置于普通程序集中),并使用它 - 它工作正常。

这让我相信这是因为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} `

1 个答案:

答案 0 :(得分:1)

如果您还没有,则应将您正在使用的任何程序集添加到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以获取参考。