2012-05-02 17 views
5

Wydaje się, że mam pewne trudności z wprowadzeniem odwołania CodeFile do CodeBehind. Zanim zapytasz, nie mam Visual Studio i nie mam Windows. Kod jest hostowany na serwerze IIS, do którego mam dostęp.Konwertowanie pliku CodeFile na CodeBehind

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

Ten kod działa idealnie, jednak po zmianie go:

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

Niestety strona zwraca błąd:

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

Wierzę, że niedozwolone kodowanie wymaga odziedziczonej klasy kontrolnej, która będzie dostępna w bibliotece DLL aplikacji sieci Web. Dlaczego potrzebujesz/możesz oczekiwać, że będziesz w stanie to zrobić bez Visual Studio? – millimoose

+1

Nie odpowiedź, naprawdę, ale: dlaczego idziesz z CodeFile -> CodeBehind? Ogólnie rzecz biorąc, ludzie idą inną drogą *, ponieważ CodeFile jest "nowszy" (w sensie względnym "7 lat vs 9 lat"). –

Odpowiedz

14

Czy jesteś pewien, że rozumiesz różnicę między CodeFile i kodzie? Zobacz, na przykład, CodeFile vs CodeBehind (zignoruj ​​odpowiedź akceptującą, jednak oba łącza są dea) lub this article o różnicy.

W skrócie:

Plik CodeBehind zakłada się być kompilowane do zespołu, który został wdrożony w folderze bin swojej stronie internetowej. Kiedy silnik ASP.NET ładuje plik aspx, używa dyrektywy Inherits, aby spróbować znaleźć tę klasę. Plik CodeBehind służy przede wszystkim do kompilacji (i narzędzi, np. "View Source"), ale praca jest wykonywana w czasie kompilacji.

Plik jest zlokalizowany i skompilowany przez program ASP.NET w czasie wykonywania, na żądanie. Możesz "wstępnie skompilować" swoją stronę, aby powrócić do starszego modelu, co jest przydatne, jeśli nie chcesz wdrażać kodu źródłowego do każdej witryny internetowej. Jednak domyślnie plik CodeFile jest plikiem .cs wdrożonym w witrynie, a klasa jest generowana w folderze tymczasowego magazynu ASP.NET. (Z technicznego punktu widzenia: CodeFile są definicjami z tylko niestandardową częścią kodu z klasy faktycznie wdrożonej w pliku C#, dlatego CodeFile początkowo nie istniało, ponieważ kompilator C# nie mógł początkowo wykonywać klas częściowych .)

Po zmianie z CodeFile na CodeBehind mówisz programowi ASP.NET, aby zignorował obecność pliku C# i szukał go tylko w skompilowanym zestawie. Z kolei ASP.NET mówi ci, że skompilowany zestaw w rzeczywistości nie zawiera klasy, której poleciłeś jej szukać.