CodeFile vs CodeBehind

138

Quelle est la différence entre CodeFile = "file.ascx.cs" et CodeBehind = "file.ascx.cs" dans la déclaration d'un contrôle utilisateur ASP.NET?

Un est-il plus récent ou recommandé? Ou ont-ils un usage spécifique?

Soldarnal
la source

Réponses:

163

CodeBehind : doit être compilé (modèle ASP.NET 1.1). Le binaire compilé est placé dans le dossier bin du site Web. Vous devez effectuer une compilation dans Visual Studio avant de déployer. C'est un bon modèle lorsque vous ne voulez pas que le code source soit visible en texte brut. Par exemple lors de la livraison à un client à qui vous n'avez pas l'obligation de fournir du code.

CodeFile : vous fournissez le fichier source avec la solution pour le déploiement. Le runtime ASP.NET 2.0 compile le code si nécessaire. Les fichiers compilés se trouvent dans Microsoft.NET [version .NET] \ Fichiers ASP.NET temporaires.

Shafqat Ahmed
la source
2
Alors, cela signifie-t-il que le développeur doit modifier manuellement l'attribut de la directive Page ou existe-t-il un moyen de créer un projet Web qui sélectionne codebehind ou codefile, par défaut, chaque fois qu'une nouvelle page Web est ajoutée?
Matt W
38
La façon dont je le vois est CodeFile est destiné à être utilisé pour un "WebSite" et "Codebehind" est destiné à un "Web Application Project" car il doit être compilé. Ainsi, lors de la conversion d'un "site Web" en "projet d'application Web", nous pouvons avoir besoin de changer manuellement toutes les occurrences de CodeFile en Codebehind!
renegade:
2
CodeFiles est agréable pendant le développement car vous pouvez tester les modifications après avoir simplement enregistré et actualisé une page et sans avoir à créer votre projet. Vous pouvez toujours "Publier" les fichiers de modèle de compilation .Net 2+ CodeFile sous forme de DLL si vous n'aimez pas publier des fichiers .cs et .vb sur un serveur de production. Lorsque vous publiez votre projet, vous pouvez éventuellement sélectionner les options «Précompiler» pour transformer l'un ou les deux de vos fichiers .aspx et .cs / .vb en DLL, comme CodeBehind.
scradam
1
Comme l'a souligné renegadeMind (et d'après les votes positifs qu'il obtient), je pense que la réponse devrait être modifiée pour souligner le fait que CodeFile est profondément lié à une solution de type "site Web" alors que CodeBehind est lié au "projet d'application Web" . Malheureusement, ma modification a été rejetée.
frenchone
3
le fait que codebehind est associé à asp 1.1 alors que codefile est lié à asp.net 2.0 pourrait être lié à penser que codefile est "supérieur" à codebehind alors qu'ils ne le sont pas (et à mon humble avis, c'est exactement l'inverse: les applications Web sont meilleures que les sites Web)
frenchone
5

Le fichier Codebehind doit être compilé avant de s'exécuter, mais dans src, nous n'avons pas besoin de compiler puis d'exécuter .. il suffit de sauvegarder le fichier.


la source
1
but in src- tu veux dire but in the CodeFile?
Don Cheadle
5

Je travaille avec un projet d'application dans Visual Studio Express 2012 pour le Web et j'utilise .NET 4.0. Dans le code derrière les fichiers pour mes pages de connexion et de changement de mot de passe, j'ai trouvé une situation où j'avais besoin à la fois de CodeBehind et de CodeFile dans la déclaration.

Si je n'ajoute pas de référence de fichier de code comme

CodeFile=login.aspx.cs

La page Web n'analyse pas et le navigateur affiche une erreur d'analyseur. Peu importe que je compile le projet ou non.

Si je n'ajoute pas de code derrière une référence comme

CodeBehind=login.aspx.cs

Les références aux classes de sécurité telles que MembershipUser échouent à la fois au moment de la compilation et lors de la tentative d'utilisation d'intellisense avec une erreur telle que "Le type ou l'espace de noms MembershipUser est introuvable". J'ai ajouté une référence à System.Web.ApplicationServices comme requis par le framework .Net 4.0.

Je dois ajouter que ces fichiers gênants s'exécutent dans une application du site Web créée à l'aide de l'outil d'application IIS. Lorsque j'ouvre le site Web à partir de Visual Studio, je n'ai aucun problème avec les erreurs d'analyseur ou les erreurs de référence. Cette confusion se produit uniquement lorsque j'ouvre l'application en tant que projet dans Visual Studio.

DavidHyogo
la source
1
Je sais ce que tu veux dire John. Et peut-être que cela mérite le vote défavorable, mais je suis vraiment aux prises avec ce problème pour le moment. Peut-être que mes difficultés ne viennent pas de cette différence mais d'autre chose. Cependant, bien que la réponse acceptée réponde à la question, elle n'aide pas avec le problème pratique auquel je suis confronté. Je devrais peut-être ouvrir une nouvelle question.
DavidHyogo