5

所以我似乎在将我的 CodeFile 引用到 CodeBehind 时遇到了一些困难。在你问之前,我没有 Visual Studio,而且我不在 Windows 上。该代码托管在我有权访问的 IIS 服务器上。

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeFile="anon.cs" %>

此代码完美运行,但是将其更改为:

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeBehind="anon.cs" %>

页面返回错误:

Parser Error Message: Could not load type 'corn.cheese.pies.CasLogin'.
4

1 回答 1

14

您确定您了解 CodeFile 和 CodeBehind 之间的区别吗?例如,参见 CodeFile vs CodeBehind(忽略接受答案,但两个链接都是 dea)或这篇关于差异的文章。

简而言之:

假定一个CodeBehind文件被编译成一个程序集,该程序集部署在bin您网站的文件夹中。当 ASP.NET 引擎加载您的aspx文件时,它使用该Inherits指令来尝试查找该类。该CodeBehind文件主要用于帮助编译(和工具,例如“查看源代码”),但工作是在编译时完成的。

CodeFile文件由 ASP.NET 在运行时根据需要定位和编译。您可以“预编译”您的网站以使用旧模型,如果您不想将源代码部署到每个网站,这很有用。但默认情况下,您CodeFile的文件.cs是部署到站点的文件,并且类是在 ASP.NET 临时存储文件夹中生成的。(从技术角度来看:CodeFile页面是partial class定义,只有类的自定义代码隐藏部分实际部署在 C# 文件中;这就是CodeFile最初不存在的原因,因为 C# 编译器最初无法执行部分类。)

通过从更改CodeFileCodeBehind您告诉 ASP.NET 忽略 C# 文件的存在,并且只在编译的程序集中查找它。反过来,ASP.NET 会告诉您编译的程序集实际上并不包含您告诉它要查找的类。

于 2012-05-02T16:08:58.190 回答