Я пытаюсь предварительно скомпилировать несколько главных страниц (без возможности обновления), чтобы поделиться ими между несколькими приложениями.Проект, который я предварительно компилирую, - это веб-сайт.Проект, который ссылается на предварительно скомпилированные сборки, является веб-приложением.Тем не менее, я получаю Не удалось загрузить тип «ASP.xxx_master» каждый раз, когда я пытаюсь сослаться на главную страницу от клиента.
<%@ Master Language="C#" Inherits="ASP.sitebase_master" %>
Моя предварительно скомпилированная главная страница выглядит следующим образом.
<%@ Master Language="C#" ClientIDMode="Static" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="AspNetHead" runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=7" /><![endif]-->
<asp:ContentPlaceHolder ID="MetaContent" runat="server" />
<title>Web Portal</title>
<link href="/media/css/style.css" rel="stylesheet" type="text/css" />
<link href="/media/js/plugins/colorbox/colorbox.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="StyleContent" runat="server" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript" language="javascript"></script>
<script src="/media/js/plugins/colorbox/jquery.colorbox-min.js" type="text/javascript" language="javascript"></script>
<script src="/media/js/plugins/filestyle/jquery.filestyle.min.js" type="text/javascript" language="javascript"></script>
<script src="/media/js/portal.master.js" type="text/javascript" language="javascript"></script>
<script language="javascript" type="text/javascript">
PORTAL.debug.init();
PORTAL.init();
</script>
<asp:ContentPlaceHolder ID="ScriptContent" runat="server" />
</head>
<body>
<div id="hld">
<div class="wrapper">
<form id="AspNetForm" runat="server">
<asp:ContentPlaceHolder ID="BodyContent" runat="server" />
</form>
<asp:ContentPlaceHolder ID="FooterContent" runat="server" />
</div>
</div>
</body>
Я в тупике.Не знаю, почему тип не разрешен.У кого-нибудь есть предложения?Оба проекта (предварительно скомпилированный веб-сайт и клиентское веб-приложение) созданы для ASP.NET 4.0.
EDIT : Здесь приведен список зависимостей предварительно скомпилированной сборки.Нет сторонних ссылок.
mscorlib, System, System.Web
UDPATE 1
Что ж, быстрое решение этой проблемы - указатьполный путь к главной странице.
<%@ Master Language="C#" Inherits="ASP.sitebase_master, App_Web_sitebase.master.cdcab7d2" %>
После этого я получаю следующую ошибку:
Произошла ошибка при попытке загрузить строковые ресурсы (сбой FindResource с ошибкой -2147023083).
После некоторых исследований это, по-видимому, связано со способом анализа разметки HTML на главной странице.Еще не совсем уверен.Я не углубился в это глубже.В целом, я не могу поверить, что это рекомендуемый способ делиться элементами управления, поскольку он абсолютно ошеломляющий идиотский.
ОБНОВЛЕНИЕ 2
Я ничего не мог сделать изценность из этого.Кажется, он ненавидит теги «script» в разделе заголовка, но я не знаю почему.Мастер страница прекрасно работает с одним скриптом.Как только я начинаю добавлять больше, я продолжаю получать эту ошибку.Потратив на это целый день, я отправил отчет об ошибке в Microsoft.Если кто-то хочет поднять его, пожалуйста, сделайте.
ОБНОВЛЕНИЕ 3
Я потратил еще несколько дней на отладку этого после отсутствия ответа от MS.Вот мои выводы.Сначала я думал, что код, сгенерированный провайдером CodeDOM, ищет ресурс .NET, который каким-то образом не внедряется в сборку при публикации.Я был неправ.После некоторого исследования выясняется, что происходит после того, как мастер-страница достигает определенного размера, ее часть сохраняется в таблице ресурсов в разделе «Каталоги данных PE» сборки.Фактически, просмотрев сгенерированную сборку в средстве просмотра ресурсов PE, я смог подтвердить это, обнаружив, что все мои сценарии включены в таблицу ресурсов.Теперь вот актуальная проблема.Происходит то, что поставщик CodeDOM генерирует вызов Win32 FindResource, чтобы извлечь этот ресурс из таблицы ресурсов.Однако FindResource не работает на сборках в памяти, только на диске.Так что это терпит неудачу с вышеупомянутым исключением.Я подхожу близко, но до сих пор нет обходного пути.