アセンブリ 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}
`