【发布时间】:2013-04-26 17:12:48
【问题描述】:
我在 Visual Studio 2008 的 ASP.NET 3.5 Web 应用程序项目中对用户控件(.ascx 文件)进行了一些更改。我注意到我在标记中所做的更改没有反映在设计器文件中(相当well-knownproblem)。我尝试删除设计器文件并使用“转换为 Web 应用程序”重新生成它。这样做时,我得到了这个错误:
设计器文件生成失败:无法加载类型 程序集中的“MyWebApplication.MyCustomExpressionBuilder” 'System.Web,版本=2.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a'。 (E:\MyPath\MyWebApplication\Web.config 第 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 类位于名为Code 的目录中的同一个Web 应用程序项目中(不是App_Code,无论出于何种原因,我不确定如果我移动类文件会破坏多少)。
如果我必须避免在控件中使用自定义 ExpressionBuilder 并添加一些属性供调用页面使用,我可以解决此问题,但这并不理想。请注意,内置表达式(如 <%$ Resources: CommonResource, SomeTextString %>)已经在控件中并且可以正常工作。
以下是我尝试过的一些事情:
- 刚刚重建项目。设计器文件未加载,并且由于缺少属性,我在代码隐藏中遇到很多构建错误。
- 只需更改控件标记、保存并更改回控件(在我尝试删除设计器文件之前),确保我没有打开设计器文件。这个过程只是默默地失败了。
- 按照建议的here,将
ClassName参数添加到我的<%@ Control %>指令中。没有效果。 - 添加
<%@ Assembly Name="MyWebApplication" %>。没有效果。 - 添加
<%@ Import Namepace="MyWebApplication" %>。没有效果。 - 添加
<%@ Reference VirtualPath="~/Code/MyCustomExpressionBuilder.cs" %>。没有效果。 - 关闭并重新启动 Visual Studio。第一次尝试在 ascx 上运行“转换为 Web 应用程序”时,至少我得到了一个不同的错误:“抛出了 'System.Exception' 类型的异常。”在尝试重建项目并得到所有错误(参见上面的 #1)后,“转换为 Web 应用程序”会产生与以前相同的“生成设计器文件失败”错误消息。
目前无法选择将项目升级到新的 Visual Studio 版本。如前所述,我不希望移动自定义 ExpressionBuilder 类,因为它至少可以从 .aspx 文件中工作。我还能尝试什么?
【问题讨论】:
标签: visual-studio-2008 asp.net-3.5 ascx expressionbuilder