CodeFile vs CodeBehind


138

Qual é a diferença entre CodeFile = "file.ascx.cs" e CodeBehind = "file.ascx.cs" na declaração de um controle de usuário do ASP.NET?

É um mais novo ou recomendado? Ou eles têm uso específico?

Respostas:


163

CodeBehind : precisa ser compilado (modelo ASP.NET 1.1). O binário compilado é colocado na pasta bin do site. Você precisa fazer uma compilação no Visual Studio antes de implantar. É um bom modelo quando você não deseja que o código-fonte seja visível como texto sem formatação. Por exemplo, ao entregar a um cliente para o qual você não tem a obrigação de fornecer código.

CodeFile : você fornece o arquivo de origem com a solução para implantação. O tempo de execução do ASP.NET 2.0 compila o código quando necessário. Os arquivos compilados estão em Microsoft.NET [versão .NET] \ Arquivos temporários do ASP.NET.


2
Então, isso significa que o desenvolvedor deve alterar manualmente o atributo da diretiva Page ou existe uma maneira de criar um projeto da web que seleciona codebehind ou codefile, por padrão, sempre que uma nova página da Web é adicionada?
Mt W

38
A maneira como eu vejo que é CodeFile deve ser usada para um "Site da Web" e "Codebehind" é para um "Projeto de Aplicativo da Web", pois precisa ser compilado. Portanto, ao converter um "site" em um "projeto de aplicativo da Web", talvez seja necessário alterar manualmente todas as ocorrências do CodeFile para Codebehind!
renegadeMind

2
Os CodeFiles são agradáveis ​​durante o desenvolvimento, porque você pode testar as alterações depois de simplesmente salvar e atualizar uma página e sem precisar compilar seu projeto. Você ainda pode opcionalmente "publicar" os arquivos de modelo de compilação do .Net 2+ CodeFile como DLLs se não gostar de postar arquivos .cs e .vb em um servidor de produção. Quando você publica seu projeto, pode opcionalmente selecionar as opções "Pré-compilar" para transformar um ou ambos os arquivos .aspx e .cs / .vb em DLLs, efetivamente como o CodeBehind.
scradam

1
Como o renegadeMind apontou (e das votações anteriores), acho que a resposta deve ser editada para enfatizar o fato de que o CodeFile está profundamente vinculado à solução do tipo "website", enquanto o CodeBehind está vinculado ao "projeto de aplicativo da web" . Infelizmente minha edição foi rejeitada.
187 frenchone

3
o fato de o codebehind estar associado ao asp 1.1, enquanto o codefile está vinculado ao asp.net 2.0, pode ser um link para pensar que o codefile é "superior" ao code-behind quando não está (e IMHO é exatamente o contrário: os aplicativos da web são melhores que os sites)
frenchone 6/02

5

O arquivo code-behind precisa compilar antes da execução, mas no src não precisamos compilar e depois executar .. basta salvar o arquivo.


1
but in src- você quer dizer but in the CodeFile?
Don Cheadle

5

Estou trabalhando com um projeto de aplicativo no Visual Studio Express 2012 para Web e usando o .NET 4.0. No código por trás dos arquivos para minhas páginas de login e alteração de senha, encontrei uma situação em que eu precisava tanto do CodeBehind quanto do CodeFile na declaração.

Se eu não adicionar uma referência de arquivo de código como

CodeFile=login.aspx.cs

A página da web não analisa e o navegador exibe um erro no analisador. Não importa se eu compilar o projeto ou não.

Se eu não adicionar um código atrás da referência, como

CodeBehind=login.aspx.cs

Referências a classes de segurança como MembershipUser falham no momento da compilação e ao tentar usar o intellisense com um erro como "O tipo ou espaço de nome MembershipUser não pode ser encontrado". Adicionei uma referência ao System.Web.ApplicationServices conforme exigido pela estrutura do .NET 4.0.

Devo acrescentar que esses arquivos problemáticos estão sendo executados em um aplicativo no site criado usando a ferramenta Aplicativo do IIS. Quando abro o site no Visual Studio, não tenho dificuldade com erros do analisador ou de referência. Essa confusão ocorre apenas quando abro o aplicativo como um projeto no Visual Studio.


1
Eu sei o que você quer dizer, John. E talvez mereça o voto negativo, mas estou realmente lutando com esse problema no momento. Talvez minhas dificuldades não venham dessa diferença, mas de outra coisa. No entanto, embora a resposta aceita responda à pergunta, ela não ajuda no problema prático que enfrento. Talvez eu deva abrir uma nova pergunta.
DavidHyogo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.