6

3.9.56 に更新するまで、ページは完全にレンダリングされました。ビューは、サービスからの json 応答を使用する Windows フォーム クライアントと共に Windows フォーム アプリケーションでテストされました。これはまだ完全に機能しますが、Razor ビューをテストすると、ページを要求するときに次の例外が発生し続けます。

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 ビューとページを正しくレンダリングしました。どちらのプロジェクトも、テスト フレームワークでの Windows フォーム アセンブリ参照を除いて、同じ参照を持っています。どちらのプロジェクトも、別のアセンブリ内の同じ管理クラスから AppHost を開始し、すべてのビューが公開されています。

構成ファイルの唯一の違いは<userSettings>、Windows フォーム テスト フレームワークに関するセクションです。

[編集]

@inherits ViewPage を @inherits ServiceStack.Razor.ViewPage に変更すると、すべてが期待どおりに機能します

4

1 に答える 1

5

この問題は私を夢中にさせていました。解決策を見つけました: app.configServiceStack.Razor アプリケーションの には、次のようなセクションが含まれています。

<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.Hostビルド時に bin フォルダーに自動的にコピーされないことです。

解決策は比較的単純です。次のようなものを のビルド後のイベントに追加しますMyApp.Host

copy /y $(SolutionDir)MyApp\app.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",
});
于 2013-10-27T14:56:05.987 に答える