26/10/2009

CodeBehind i CodeFile

Home

Jakiś czas temu pisząc prostą aplikacje WWW utworzyłem z rozpędu projekt typu Web Application zamiast Web Site. Zanim się zorientowałem popełniłem już trochę kodu stwierdziłem więc, że nie będę pisał go od początku. Usunąłem projekt z solution, wykasowałem plik z rozszerzeniem csproj i skorzystałem z polecenia Add -> Existing Web Site.... Wszystko wydawało się w porządku do momentu kiedy spróbowałem skompilować aplikację. W efekcie otrzymałem komunikat jak poniżej:

Could not load type 'PageName'.

Przy drugiej próbie kompilacji otrzymałem taki sam błąd kompilacji. Patrzę i patrzę w kod strony i nic. Przecież jeszcze 5 minut temu kompilowało się, czary? Oczywiście, że nie. Po chwili przypominam sobie o jednej drobnej różnicy. W przypadku projektów typu Web Application w dyrektywie @Page używa się atrybutu CodeBehind, a w przypadku Web Site'ów atrybutu CodeFile. Niby szczegół ale jeśli się o nim zapomni może popsuć trochę krwi.

5 comments:

Anonymous said...

jaka jest różnica pomiedzy web project i web site???

Michał Komorowski said...
This comment has been removed by the author.
Michał Komorowski said...

Miałem oczywiście na myśli projekt typu Web Application, a nie Web Project. Dzięki za zwrócenie uwagi na tą pomyłkę.

kostrzak said...

Miałem dłuższy komentarz, ale po daniu podglądu wykasował mi się i w żaden sposób nie mogłem go przywrócić :) W każdym bądź razie post mi dzisiaj pomógł ,a WebApplication z niewiadomych powodów nie ma profili (nie działają).

Michał Komorowski said...

Nie ma co tu dużo pisać, po prostu projekty typu WebApplication nie wspierają profili. Dokładniej mówiąc możesz ich używać ale cały kod musisz napisać samemu. W przypadku WebSite odpowiednie klasy są tworzone niejako w tle. Za generowanie potrzebnego kodu odpowiedzialny jest tzw. build provider. Co ciekawe możesz tworzyć własnych dostawców build'u którzy na przykład na podstawie opisu schematu bazy danych wygenerują ci klasy mapowania relacyjno-obiektowego. Jest to jeden z powodów, dla których wolę WebSite'y.

Post a comment