СБОРКА 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
Затем у меня есть вторая сборка (которая ссылается на вышеприведенную) и именно она содержит веб-службу:
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
. Поскольку он выдается внешним компонентом, я на самом деле не знаю, что такое сообщение об исключении (я использую двоичные файлы стека службы).
Сначала я задавался вопросом, не потому ли это, что класс модели отличается от класса макета (даже если он происходит от него). Чтобы проверить эту теорию, я создал класс 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}
`