我在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文件开始工作。我还能尝试什么?