所以我似乎很难将我的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'.

最佳答案

您确定您了解CodeFile和CodeBehind之间的区别吗?例如,关于差异,请参见CodeFile vs CodeBehind(忽略两个链接均是接受答案),或者参见this article

简而言之:

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

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

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

关于c# - 将CodeFile转换为CodeBehind,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10417365/

10-11 21:26