我在Visual Studio 2008的ASP.NET 3.5 Web應用程序項目中對用戶控件(.ascx文件)進行了一些更改。我注意到我在標記中所做的更改未反映在設計器文件中(相當於well-knownproblem)。我嘗試刪除設計器文件並使用「轉換爲Web應用程序」重新生成它。在這樣做時,我得到這個錯誤:將自定義ExpressionBuilder標記添加到.ascx時出現「設計器文件生成失敗」
Generation of designer file failed: Could not load type 'MyWebApplication.MyCustomExpressionBuilder' from assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. (E:\MyPath\MyWebApplication\Web.config line 166)
我在的.ascx標記作出改變是使用一個custom ExpressionBuilder
作爲我的.ascx內的Visible
和/或Enabled
某些控件的屬性的值。此特定的ExpressionBuilder
已成功用於Web應用程序中的其他位置,以將布爾值返回到相似的屬性。例如:
<asp:TableRow runat="server" Visible="<%$ MyCustom: TheExpressionValue %>">
<%-- some TableCells and contents here --%>
</asp:TableRow>
在Web.config線錯誤消息指出是add
標籤如下所示:
<system.web>
<compilation debug="true">
<!-- Skipping the 'assemblies' and 'buildProviders' areas -->
<expressionBuilders>
<add expressionPrefix="MyCustom" type="MyWebApplication.MyCustomExpressionBuilder" />
</expressionBuilders>
</compilation>
<!-- other stuff -->
</system.web>
類MyCustomExpressionBuilder
是在同一個Web應用程序項目在一個名爲Code
目錄(不是App_Code
,無論出於何種原因,我不知道如果我移動類文件,會損失多少)。
我可以解決此問題,如果必須避免控件中的自定義ExpressionBuilder
並添加調用頁面的一些屬性來代替使用,但這不會很理想。請注意,內置表達式(如<%$ Resources: CommonResource, SomeTextString %>
)已經在控制中並且工作正常。
這裏有一些事情我已經嘗試:
- 剛剛重建項目。設計器文件無法加載,並且由於缺少屬性,導致代碼隱藏中出現很多構建錯誤。
- 只需更改控件標記,保存並更改控件(在嘗試刪除設計器文件之前),確保沒有打開設計器文件。這個過程默默地失敗了。
- 將
ClassName
參數添加到我的<%@ Control %>
指令中,如建議here。沒有效果。 - 添加
<%@ Assembly Name="MyWebApplication" %>
。沒有效果。 - 添加
<%@ Import Namepace="MyWebApplication" %>
。沒有效果。加入<%@ Reference VirtualPath="~/Code/MyCustomExpressionBuilder.cs" %>
。沒有效果。 - 關閉並重新啓動Visual Studio。在第一次嘗試在ascx上運行「轉換爲Web應用程序」時,至少我得到了一個不同的錯誤:「拋出了'System.Exception'類型的異常。」嘗試重建項目並獲取所有錯誤(參見上面的#1)後,「轉換爲Web應用程序」會產生與以前一樣的「生成設計器文件失敗」錯誤消息。
將項目升級到新的Visual Studio版本目前不是一個選項。如前所述,我不想移動自定義的ExpressionBuilder
類,因爲它至少從.aspx文件開始工作。我還能嘗試什麼?