【发布时间】:2010-12-03 05:01:50
【问题描述】:
我的 .ASCX 文件顶部有以下定义:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
在该控件中,我使用 块来引用我在代码隐藏文件中声明的成员。如果我编译和部署控件,它工作正常。但在 Visual Studio 中,我收到很多设计时错误,“{some variable} 在当前上下文中不存在。” Intellisense 也中断了:它适用于 UserControl 的成员,但找不到我自己声明的成员。还有其他问题。一般来说,一切都表明生成的 ASP.articleview_ascx 类不是从 MyNameSpace.ArticleView 类继承的。
我发现如果我将 CodeBehind 属性切换为“CodeFile”:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
Intellisense 突然起作用,所有设计时错误都消失了。但我不想进行运行时编译,也不想部署我的 .ASCX.CS 文件 - 所以我不能使用 CodeFile。
我检查了一些简单的东西,比如确保我的 CodeBehind 文件名正确并且 Inherits 类具有正确的命名空间等(并且由于在将属性更改为 CodeFile 后它可以正常工作,因此必须指向正确的地方......)但我错过了什么?为什么不能处理 CodeBehind 属性?
谢谢,
史蒂夫
更新:来自下面的一个线程 - 基本问题是,为什么不直接使用 CodeFile?答:当我尝试在我的文件中使用 CodeFile= 进行部署时,部署后我收到以下堆栈跟踪(完整显示):
/_layouts/Pages/ViewPage.aspx.cs' 不存在。在 System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) 在 System.Web.UI.TemplateParser.ProcessCodeFile(VirtualPath codeFileVirtualPath) 在 System.Web.UI.TemplateParser.ProcessMainDirectiveAttribute(String deviceName, String name, String value, IDictionary parseData )
(这是来自对 /_layouts/Pages/ViewPage.aspx 的请求。ViewPage 是具有其他几个控件的页面,包括我在原始示例中提到的 ArticleView。它恰好是第一个失败的文件 - 如果我回到 ViewPage 中的 CodeBehind=,然后包含 ASCX 和 CodeFile= 将以同样的方式失败。)这似乎是页面编译器抱怨,因为在任何加载的 DLL 中都找不到继承的代码隐藏类,所以它期望必须是一个CS文件,做按需编译。
这里的问题是我不想部署 CS 文件,只是 ASPX/ASCX。阅读了许多像this great one 这样的文章后,我知道了各种新的部署模型,尽管除了 Web 应用程序项目(从 VS2003 转换而来,我们是 2005 年的后期采用者和 WAP 模型有在我们从 2003 年开始切换时已经添加了。)在许多 VS2005/8 项目中,我从来没有遇到过 CodeBehind= 的问题,直到这个 Intellisense 问题出现......尽管在这种情况下它没有帮助我正在部署到 SharePoint,这引入了一个全新的复杂程度。
由于我之前没有使用 CodeFile 进行部署,很可能我错过了一些我应该在构建时在 VS 中设置的选项,以便强制预编译。我只需要能够像今天一样部署为一组带有单个代码隐藏 DLL 的 ASPX/ASCX。这在今天与 CodeBehind= 一起工作......它只是有最初提到的 Intellisense 问题,这正是我想要解决的问题 :)
当我确定哪些文件可能与问题相关时,将发布更多信息...
【问题讨论】:
-
您是否检查了文件上的构建操作?
标签: asp.net visual-studio visual-studio-2008 intellisense code-behind