【问题标题】:Page class outside of App_Code will not compileApp_Code 之外的页面类将无法编译
【发布时间】:2009-11-03 13:13:30
【问题描述】:

我有一个网站有 2 个文件如下:

  • page.aspx
  • page.aspx.cs

过去我可以将新文件拖放到 Web 服务器上,IIS 会自动编译文件,我可以访问页面,例如

http://www.website.com/page.aspx

... 以及包含在 .cs 文件中的页面类中的相关功能会很好地工作。

现在我收到错误:“无法加载类型 namespace.classname”,它指的是我的页面类。

现在出于某种奇怪的原因,我必须将所有 .cs 文件,甚至是页面类放入 app_code 文件夹中。

我网站上的所有变化是我重新组织了结构,以便我的页面不再位于 Web 根目录中,而是位于 http://.../newfolder/page.aspx 中。

由于某种原因,我的所有 page.aspx.cs 文件现在都必须在 app_code 中。

有什么想法吗?

【问题讨论】:

  • 你能贴一些代码吗?
  • 您没有使用 Visual Studio 来管理您的 Web 项目吗?如果是这样的话,似乎不太可能发生这样的事情。
  • 是的,使用 VS。我们发现从我的电脑上传的文件可以正常工作。但是,从我的同事 PC 上传的完全相同的文件不起作用。他的文件,总是必须将 .cs 文件放入 app_code 文件夹中!即使是页面加载中只有一个 response.write 的非常基本的文件也不起作用。每当他将文件上传到服务器时,只有将 .cs 文件放在 app_code 中,它们才会起作用。
  • 您的项目是网站还是 WEB 应用程序?

标签: asp.net compilation app-code


【解决方案1】:

听起来您正在混淆一个 Web 应用程序项目和一个网站。

您确定文件完全相同吗?也许一个@Page 指令说 CodeBehind=Page.aspx.cs 而另一个说 CodeFile=Page.aspx.cs?

CodeBehind 需要项目编译,所以你不能只放入一个新的 .cs 文件,你需要上传一个新编译的 DLL。 CodeFile 将允许动态编译。

App_Code 目录在您的应用程序被访问时被动态编译(在这两种情况下),因此当您将文件放在那里时,Inherit 指令具有有效的类型。一般来说,不要这样做。您希望 .cs 文件与 .aspx 文件一起使用。将 App_Code 用于与特定页面无关的业务逻辑或实用程序类。

最后,这个新的子目录是否设置为 IIS 中的新应用程序?新目录中的 web.config 文件有什么变化?您是否运行相同版本的 ASP.NET?检查“编译”标签。我不确定你可以在那里做什么来导致这种情况,但我相信你可能会导致一些混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多