Преобразование CodeFile в CodeBehind

Таким образом, у меня, кажется, есть некоторые трудности с превращением моей ссылки 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'.

1 ответ

Решение

Вы уверены, что понимаете разницу между 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# изначально не мог делать частичные классы.)

Переходя от CodeFile в CodeBehind вы говорите ASP.NET игнорировать наличие файла C# и искать его только в скомпилированной сборке. ASP.NET, в свою очередь, говорит вам, что скомпилированная сборка на самом деле не содержит класс, который вы сказали ей искать.

Другие вопросы по тегам