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

次に、2 つ目のアセンブリ (上記のアセンブリを参照) があり、実際に Web サービスをホストするアセンブリです。

Concrete_Assembly.dll
    Views
        Index.cshtml

これには、他のアセンブリIndexResponseから派生したというクラスがあります。Model

public class IndexResponse : Model
{ 
}

インデックス.cshtml

@Model MyOtherNameSpace.IndexResponse
<p>Test</p>

さて、問題です。行を削除すると@Model、すべてが正常に機能し、他の DLL のレイアウト ページ内にインデックス ページが表示されます (カスタム VirtualPathProvider を使用して、複数の Dll 間でリソースを検索します)。ただし、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} `

4

1 に答える 1

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 Web ページも無効にします。

<appSettings>
  <add key="webPages:Enabled" value="false" />
</appSettings>

リファレンスについては、 RazorRockstars Self Host app.configを参照してください。

于 2013-07-09T16:00:58.500 に答える