Visual studio 2008 &引用;生成设计器文件失败";将自定义ExpressionBuilder标记添加到.ascx时
我正在Visual Studio 2008中对ASP.NET 3.5 web应用程序项目中的用户控件(.ascx文件)进行一些更改。我注意到,我在标记中所做的更改并没有反映在设计器文件中(一个很好的示例)。我尝试删除设计器文件并使用“转换为Web应用程序”重新生成它。执行此操作时,出现以下错误: 生成设计器文件失败:无法加载类型 来自程序集的“MyWebApplication.MyCustomExpressionBuilder” 'System.Web,版本=2.0.0.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a'。 (E:\MyPath\MyWebApplication\Web.config第166行) 我在.ascx标记中所做的更改是使用a作为.ascx中某些控件的Visual studio 2008 &引用;生成设计器文件失败";将自定义ExpressionBuilder标记添加到.ascx时,visual-studio-2008,asp.net-3.5,ascx,expressionbuilder,Visual Studio 2008,Asp.net 3.5,Ascx,Expressionbuilder,我正在Visual Studio 2008中对ASP.NET 3.5 web应用程序项目中的用户控件(.ascx文件)进行一些更改。我注意到,我在标记中所做的更改并没有反映在设计器文件中(一个很好的示例)。我尝试删除设计器文件并使用“转换为Web应用程序”重新生成它。执行此操作时,出现以下错误: 生成设计器文件失败:无法加载类型 来自程序集的“MyWebApplication.MyCustomExpressionBuilder” 'System.Web,版本=2.0.0.0,区域性=中性, Pu
可见
和/或启用
属性的值。此特定的ExpressionBuilder
在web应用程序的其他位置成功地用于将布尔值返回到类似的属性。例如:
<asp:TableRow runat="server" Visible="<%$ MyCustom: TheExpressionValue %>">
<%-- some TableCells and contents here --%>
</asp:TableRow>
类MyCustomExpressionBuilder
位于名为code
的目录中的同一web应用程序项目中(不是App\u code
,无论出于何种原因,我不确定如果移动类文件,会有多少损坏)
如果必须的话,我可以通过避免控件中的自定义ExpressionBuilder
,并添加一些属性供调用页面使用来解决这个问题,但这并不理想。请注意,内置表达式(如
)已经在控件中,并且工作正常
以下是我尝试过的一些事情:
ClassName
参数添加到我的
指令中。没有效果
。没有效果
。没有效果
。没有效果当前不允许将项目升级到新的Visual Studio版本。如前所述,我不希望移动自定义
ExpressionBuilder
类,因为它至少在.aspx文件中工作。我还能试什么呢?我想出来了。问题是,由于某种原因,编译器无法找到带有自定义ExpressionBuilder
的程序集。解决此问题的方法是在add
标记中使用比类名和名称空间稍多的信息:
<system.web>
<compilation debug="true">
<!-- Skipping the 'assemblies' and 'buildProviders' areas -->
<expressionBuilders>
<add expressionPrefix="MyCustom" type="MyWebApplication.MyCustomExpressionBuilder, MyWebApplication" />
</expressionBuilders>
</compilation>
<!-- other stuff -->
. 对于VS2008,您可以使用regedit
来:
转到HKEY\U CURRENT\U USER\Software\Microsoft\VisualStudio\9.0
创建名为WebApplicationProjects
的新键(如果不存在)。然后,选择它
如果不存在名为Debug
的新密钥,请创建该密钥。然后,选择它
添加名为LogFile
的新字符串。该值应该是VS2008将具有写入权限的路径(因此,可能不是C:根目录中的文件)。确保避开任何反斜杠,如C:\\PathICanWrite\\vslogfile.txt
添加名为启用的新DWORD,并将其设置为1
添加名为LogFieldGeneratorFailures
的新DWORD,并将其设置为1
重新启动VS2008
当我查看日志文件时,我能够使用堆栈跟踪来确定我有一个程序集加载问题,这一点现在看起来很明显。日志中的消息提供了解决程序集加载问题的进一步提示:
警告:程序集绑定日志记录已关闭。
要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1。
注意:程序集绑定失败日志记录会带来一些性能损失。
要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog]
我发现需要重新启动计算机,新的注册表设置才能生效。然后,日志中提供了其他程序集绑定信息
<system.web>
<compilation debug="true">
<!-- Skipping the 'assemblies' and 'buildProviders' areas -->
<expressionBuilders>
<add expressionPrefix="MyCustom" type="MyWebApplication.MyCustomExpressionBuilder, MyWebApplication" />
</expressionBuilders>
</compilation>
<!-- other stuff -->