我試圖預編譯一些母版頁(不能更新)以在多個應用程序間共享它們。我正在預編譯的項目是一個網站。引用預編譯程序集的項目是一個Web應用程序。但是,每次我嘗試從客戶端引用母版頁時,我都收到無法加載類型「ASP.xxx_master」。當引用預編譯的母版頁時,無法加載類型「ASP.xxx」
<%@ 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>
我難倒。不知道爲什麼類型沒有解決。有人有建議嗎?這兩個項目(預編譯的網站和客戶端Web應用程序)都是爲ASP.NET 4.0構建的。
編輯:這是預編譯程序集的依賴關係列表。沒有第三方參考。
mscorlib程序, 系統, 的System.Web
UDPATE 1
好,快速修復這個問題是指定的完整路徑母版頁。
<%@ Master Language="C#" Inherits="ASP.sitebase_master, App_Web_sitebase.master.cdcab7d2" %>
這樣做之後,我收到以下錯誤:
An error occurred while try to load the string resources (FindResource failed with error -2147023083).
之後做一些研究,這似乎與HTML標記母版頁中解析的方式。還不完全確定。我還沒有深入瞭解它。總體而言,我不能相信這是分享控制的推薦方式,因爲它絕對是令人難以置信的愚蠢。
更新2
我不能讓任何有價值的東西了這一點。它似乎是討厭頭部的「腳本」標籤,但我不知道爲什麼。 Master Page的功能很好,包含單個腳本。只要我開始添加更多,我一直得到這個錯誤。浪費了一整天的時間後,我終於向微軟提交了一份bug report。如果有人想要碰撞它,請做。
更新3
我花了幾天沒有從MS響應後調試此。這是我的發現。我最初認爲由CodeDOM提供程序生成的代碼正在尋找.NET資源,該資源在發佈時並未嵌入程序集中。我錯了。經過一番調查後,看起來發生了什麼事情是在主頁達到一定大小之後發生的,其中一部分存儲在程序集的PE Data Directories部分的資源表中。事實上,在PE資源查看器中查看生成的程序集後,我可以通過查找資源表中包含的所有腳本來確認這一點。現在,這是實際的問題。發生什麼事是CodeDOM提供程序生成一個調用Win32 FindResource從資源表中拉取該資源。但是,FindResource不適用於內存中的程序集,僅在磁盤上。所以它會因上述例外而失敗。我正在接近,但仍然沒有解決方法。
您是否引用在新項目中爲母版頁創建的程序集文件? – NotMe 2011-04-27 16:14:11
是的,客戶端Web應用程序正在引用我的預編譯網站程序集。我把它扔到反射器中,看到ASP名字空間下的類型。我可以在代碼隱藏中爲客戶端應用程序的任何頁面實例化類型,而不會出現問題。但不是當我嘗試在母版頁中繼承它。 – 2011-04-27 16:16:08
啊,所以你使用的網站,而不是一個Web應用程序?真的希望MS會刪除網站以避免這些問題。 – Phill 2011-05-03 05:13:47