CodeFile vs CodeBehind

138

Was ist der Unterschied zwischen CodeFile = "file.ascx.cs" und CodeBehind? = "file.ascx.cs" in der Deklaration eines ASP.NET-Benutzersteuerelements?

Ist eine neuere oder empfohlen? Oder haben sie eine bestimmte Verwendung?

Soldarnal
quelle

Antworten:

163

CodeBehind : Muss kompiliert werden (ASP.NET 1.1-Modell). Die kompilierte Binärdatei wird im Ordner bin der Website abgelegt. Sie müssen vor der Bereitstellung eine Kompilierung in Visual Studio durchführen. Es ist ein gutes Modell, wenn der Quellcode nicht als einfacher Text angezeigt werden soll. Zum Beispiel bei der Lieferung an einen Kunden, für den Sie nicht verpflichtet sind, Code bereitzustellen.

CodeFile : Sie stellen der Quelldatei die Lösung für die Bereitstellung zur Verfügung. Die ASP.NET 2.0-Laufzeit kompiliert den Code bei Bedarf. Die kompilierten Dateien befinden sich unter Microsoft.NET [.NET-Version] \ Temporäre ASP.NET-Dateien.

Shafqat Ahmed
quelle
2
Bedeutet dies also, dass der Entwickler das Attribut der Page-Direktive manuell ändern muss, oder gibt es eine Möglichkeit, ein Webprojekt zu erstellen, bei dem jedes Mal, wenn eine neue Webseite hinzugefügt wird, standardmäßig Codebehind oder Codefile ausgewählt wird?
Matt W
38
So wie ich es sehe, soll CodeFile für eine "WebSite" und "Codebehind" für ein "Webanwendungsprojekt" verwendet werden, da es kompiliert werden muss. Während wir eine "Website" in ein "Webanwendungsprojekt" konvertieren, müssen wir möglicherweise alle CodeFile-Vorkommen manuell in Codebehind ändern!
RenegadeMind
2
CodeFiles sind während der Entwicklung hilfreich, da Sie Änderungen testen können, nachdem Sie eine Seite einfach gespeichert und aktualisiert haben und ohne Ihr Projekt erstellen zu müssen. Sie können die .Net 2+ CodeFile-Kompilierungsmodelldateien optional weiterhin als DLLs "veröffentlichen", wenn Sie keine .cs- und .vb-Dateien auf einem Produktionsserver veröffentlichen möchten. Wenn Sie Ihr Projekt veröffentlichen, können Sie optional die Optionen "Vorkompilieren" auswählen, um eine oder beide Ihrer ASPX-Dateien und CS / VB-Dateien in DLLs umzuwandeln, ähnlich wie CodeBehind.
Scradam
1
Wie renegadeMind hervorhob (und aus den positiven Bewertungen hervorgeht), sollte die Antwort meiner Meinung nach bearbeitet werden, um die Tatsache hervorzuheben , dass CodeFile eng mit der Lösung vom Typ "Website" verknüpft ist, während CodeBehind mit "Webanwendungsprojekt" verknüpft ist . Leider wurde meine Bearbeitung abgelehnt.
Französisch
3
die Tatsache , dass Code - Behind mit asp 1.1 verbunden ist , während Codefile zu asp.net verknüpft ist 2.0 in Verbindung bringen könnte Codefile sind „überlegen“ Code - Behind zu denken , wenn sie nicht (und meiner Meinung nach ist dies genau das Gegenteil: Web - Anwendungen sind besser als Websites)
Französisch
5

Codebehind-Dateien müssen vor dem Ausführen kompiliert werden, aber in src müssen wir sie nicht kompilieren und dann ausführen. Speichern Sie einfach die Datei.


quelle
1
but in src- Du meinst but in the CodeFile?
Don Cheadle
5

Ich arbeite mit einem Anwendungsprojekt in Visual Studio Express 2012 für das Web und verwende .NET 4.0. Im Code hinter den Dateien für meine Anmelde- und Kennwortseiten habe ich eine Situation gefunden, in der ich sowohl CodeBehind als auch CodeFile in der Deklaration benötigte.

Wenn ich keine Codedateireferenz wie hinzufüge

CodeFile=login.aspx.cs

Die Webseite wird nicht analysiert und der Browser zeigt einen Parserfehler an. Es spielt keine Rolle, ob ich das Projekt kompiliere oder nicht.

Wenn ich keinen Code hinter der Referenz wie hinzufüge

CodeBehind=login.aspx.cs

Verweise auf Sicherheitsklassen wie MembershipUser schlagen sowohl beim Kompilieren als auch beim Versuch, Intellisense zu verwenden, mit dem Fehler "Der Typ oder Namespace MembershipUser kann nicht gefunden werden" fehl. Ich habe einen Verweis auf System.Web.ApplicationServices hinzugefügt, wie vom .NET 4.0-Framework gefordert.

Ich sollte hinzufügen, dass diese problematischen Dateien in einer Anwendung auf der Website ausgeführt werden, die mit dem IIS-Anwendungstool erstellt wurde. Wenn ich die Website von Visual Studio aus öffne, habe ich keine Probleme mit Parser- oder Referenzfehlern. Diese Verwirrung tritt nur auf, wenn ich die Anwendung als Projekt in Visual Studio öffne.

DavidHyogo
quelle
1
Ich weiß was du meinst John. Und vielleicht verdient es die Ablehnung, aber ich kämpfe im Moment wirklich mit diesem Problem. Vielleicht kommen meine Schwierigkeiten nicht von diesem Unterschied, sondern von etwas anderem. Obwohl die akzeptierte Antwort die Frage beantwortet, hilft sie nicht bei dem praktischen Problem, mit dem ich konfrontiert bin. Vielleicht sollte ich eine neue Frage stellen.
DavidHyogo