无法将“X”类型的对象转换为“X”类型 - ASP.NET
Posted
技术标签:
【中文标题】无法将“X”类型的对象转换为“X”类型 - ASP.NET【英文标题】:Unable to cast object of type 'X' to type 'X' - ASP.NET 【发布时间】:2010-10-05 10:52:14 【问题描述】:我目前正在使用 Visual Studio 2008 中的 ASP.NET 网站项目,每次我更改用户控件的代码隐藏页面并浏览到使用用户控件的页面时,我都会收到以下错误:
无法转换类型的对象 'ASP.basepage_master' 键入 'ASP.basepage_master'。
我必须重建整个解决方案才能解决此错误。有没有其他人遇到过这个错误,他们知道如何解决吗?
【问题讨论】:
【参考方案1】:删除您的临时 ASP.NET 文件(C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 中的所有内容)可以让这种情况消失......一段时间。
【讨论】:
我必须停止 IIS 才能删除临时 ASP.NET 文件,从而解决此错误。 太棒了。很高兴它奏效了。 (咳我能投赞成票吗?咳)【参考方案2】:根据我的理解,这是有道理的。
您正在对代码隐藏进行更改。为了使这些更改生效,您需要构建该项目,以便可以将代码隐藏编译到该项目的 DLL 文件中。当您更改代码隐藏并且不构建项目时,您实际上拥有该页面的两个版本,而 ASP.Net 无法解析这两个版本。因此,当您编译该类时,所做的更改会被协调到 DLL 中。
【讨论】:
我使用的是网站项目模型,而不是visual studio中的web应用项目模型。 我仍然相信这个概念是一样的,除了构建到一个 dll 文件。 ASP.NET 仍然需要编译您的源文件,并且它使用它的缓存版本来运行您的站点,而不是您未编译的“工作”版本。 odetocode.com/Articles/417.aspx【参考方案3】:如果我在本地工作站上停止并重新启动 IIS,我能够解决此问题。
【讨论】:
这行得通的可怕。如果在生产中发生这种情况怎么办? IIS 重置?【参考方案4】:这篇博文很好地描述了这个问题:
http://professionalaspnet.com/archive/2007/04/09/Unable-to-cast-object-of-type-_2700_ASP.masterpage_5F00_master_2700_-to-type-_2700_ASP.masterpage_5F00_master_27002E00_.aspx
【讨论】:
【参考方案5】:尤里卡啊!!明白了...这个有效...
当您拖放用户控件或通过LoadControl
方法加载它时,在其路径中使用“波浪号”。例如。 this.LoadControl("~/MyUserControl.ascx");
同样适用于放置在页面上的控件。将波浪号添加到 aspx 页面中用户控件的声明性路径。
我们可以将其称为 VS2005 中的错误,并在 VS 2008 中修复。
如果这不起作用或需要更多解释,请回复我。或者,不要忘记将此标记为答案。
【讨论】:
【参考方案6】:我也遇到了同样的问题,我终于能够构建网站了。
我必须为 ASP.NET 项目创建另一个具有不同名称的母版页,将原始内容复制并粘贴到新的母版页中,使我的所有子窗体都继承自新母版页,然后删除旧母版页。
该网站现在将运行。我不知道调试器是如何感到困惑并开始使用不存在的缓存对象的。我尽一切努力让它释放缓存(删除C:\%USER%\AppData\Local
和C:\Windows\Microsoft.NET
下的临时文件,重命名母版页,重命名主类,更改文件以强制它们重新加载,重建解决方案,添加web.config
选项<compilation batch="false" debug="false"/>
),但删除母版页除外。
删除母版页为我解决了这个问题,但我不明白为什么我必须这样做。
这是我挣扎的线索:
https://forums.asp.net/t/2172428.aspx
【讨论】:
以上是关于无法将“X”类型的对象转换为“X”类型 - ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章