2008-09-16 14 views
122

Was ist der Unterschied zwischen Codefile = „file.ascx.cs“ und Codebehind = „file.ascx.cs“ in der Deklaration eines Steuer Benutzer ASP.NET?Codefile vs Codebehind

Ist einer neuer oder empfohlen? Oder haben sie spezifische Verwendung?

Antwort

149

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 in Visual Studio eine Kompilierung durchführen. Es ist ein gutes Modell, wenn der Quellcode nicht als einfacher Text angezeigt werden soll. Zum Beispiel, wenn Sie an einen Kunden liefern, für den Sie keine Verpflichtung haben, einen Code zur Verfügung zu stellen.

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

+2

Bedeutet dies, dass der Entwickler das Attribut der Page-Direktive manuell ändern muss, oder gibt es eine Möglichkeit, ein Webprojekt zu erstellen, das Codebehind oder Codefile standardmäßig jedes Mal auswählt, wenn eine neue Webseite hinzugefügt wird? –

+34

Die Art, wie ich es sehe ist CodeFile soll für eine "WebSite" und "Codebehind" für ein "Web Application Project" verwendet werden, da es kompiliert werden muss. Beim Konvertieren einer "Website" in ein "Web Application Project" müssen wir daher möglicherweise alle CodeFile-Vorkommen manuell in Codebehind ändern! – renegadeMind

+1

CodeFiles sind während der Entwicklung gut, da Sie Änderungen nach dem Speichern und Aktualisieren einer Seite testen können, ohne Ihr Projekt erstellen zu müssen. Sie können die .Net 2+ CodeFile-Kompilierungsmodelldateien weiterhin optional 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 Option "Vorkompilieren" auswählen, um eine oder beide Ihrer ASPX-Dateien und .cs/.vb-Dateien in DLLs umzuwandeln, ähnlich wie bei CodeBehind. – scradam

4

Codebehind-Datei muss vor dem Lauf kompiliert werden, aber in src müssen wir nicht kompilieren und dann ausführen .. einfach die Datei speichern.

+1

'aber in src' - meinst du' aber in der CodeFile'? – mmcrae

3

Ich arbeite mit einem Anwendungsprojekt in Visual Studio Express 2012 für Web und mit .NET 4.0. Im Code hinter den Dateien für meine Login- und Passwort-Seiten habe ich eine Situation gefunden, in der ich sowohl CodeBehind als auch CodeFile in der Deklaration brauchte.

Wenn ich füge keinen Code Dateireferenz wie

CodeFile=login.aspx.cs 

Die Webseite analysieren nicht und der Browser zeigt einen Parser-Fehler. Es spielt keine Rolle, ob ich das Projekt kompiliere oder nicht.

Wenn ich keinen Code hinter Referenz wie

CodeBehind=login.aspx.cs 

Verweise auf Sicherheitsklassen wie MembershipUser hinzufügen scheitern sowohl bei der Kompilierung und wenn Intellisense mit einem Fehler wie „Der Typ oder Namespace MembershipUser zu verwenden versuchen, kann nicht gefunden werden". Ich habe einen Verweis auf System.Web.ApplicationServices hinzugefügt, wie von dem .NET 4.0 Framework gefordert.

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

+1

-1: interessant, vielleicht, aber beantwortet nicht die Frage –

+0

Ich weiß, was du meinst John. Und vielleicht verdient es den Downvote, aber ich habe im Moment wirklich Probleme mit diesem Problem. Vielleicht entstehen meine Schwierigkeiten nicht aus diesem Unterschied, sondern aus etwas anderem. Obwohl die angenommene Antwort die Frage beantwortet, hilft sie nicht bei dem praktischen Problem, dem ich gegenüberstehe. Vielleicht sollte ich eine neue Frage eröffnen. – DavidHyogo

Verwandte Themen