Pastas de código compartilhado em sites da Web ASP.NET
Se o seu aplicativo da Web inclui código que você deseja compartilhar entre páginas, você poderá manter o código em uma das duas pastas especiais sob a raiz do seu aplicativo da Web, a pasta Bin e a pasta App_Code.Quando você cria essas pastas e armazena tipos específicos de arquivos nelas, o ASP.NET trata os arquivos de maneiras especiais.
Você pode armazenar módulos compilados na pasta Bin, de maneira que outros códigos em qualquer lugar no aplicativo da Web (tais como códigos para páginas) fazem referência a essa pasta automaticamente.Um exemplo típico é que você tenha o código compilado para uma classe personalizada.Você pode copiar o assembly compilado para a pasta Bin do seu aplicativo da Web e a classe estará disponível para todas as páginas.
Módulos (assemblies) na pasta Bin não precisam ser registrados.A presença de um arquivo .DLL na pasta Bin é suficiente para que o ASP.NET o reconheça.Se você alterar o arquivo .dll e escrever uma nova versão dele para a pasta Bin, o ASP.NET detectará a atualização e usará a nova versão do arquivo .dll nas novas solicitações de página em diante.
Colocar módulos compilados na a pasta Bin pode representar um risco de segurança.Se você escreveu o código e o compilou em seguida, você saberá o que o código faz.Entretanto, você deve tratar código compilado na pasta Bin como você trata qualquer código executável.Desconfie do código compilado até que o tenha testado e tenha certeza de que você compreende o que ele faz.
Observe esses aspectos de segurança ao colocar código compilado para a pasta Bin:
Módulos (assemblies) na pasta Bin estão com o escopo para o aplicativo atual.Portanto, eles não poderão acessar recursos ou chamar código de fora do aplicativo da Web atual.
Em tempo de execução, os níveis de acesso de um assembly são estabelecidos pelo nível de confiabilidade especificado no computador local.Para obter mais informações, consulte Níveis de confiança ASP.NET e arquivos de diretiva.
Se você estiver trabalhando em um designer como o Visual Studio, o código na pasta Bin executará em um contexto diferente do que em tempo de execução.O código por exemplo, pode ser executado com confiança total.
Você pode armazenar código-fonte na pasta App_Code, e ela será ser compilada automaticamente em tempo de execução.O assembly resultante está acessível a todos os outros códigos no aplicativo da Web.A pasta App_Code portanto funciona como a pasta Bin, exceto que você pode armazenar código-fonte nela em vez de código compilado.A pasta App_Code e seu status especial em um aplicativo ASP.NET torna possível criar classes personalizadas e outros arquivos que contém somente código-fonte e usá-los em seu aplicativo da Web sem ter que compila-los independentemente.
A pasta App_Code pode conter arquivos de código-fonte gravados como arquivos de classe tradicionais — ou seja, arquivos com uma extensão .vb, extensão .cs, e assim por diante.Entretanto, ele também pode incluir arquivos que não estiverem explicitamente em uma linguagem de programação específica.Os exemplos incluem arquivos .WSDL (linguagem de descrição de serviço da Web) e arquivos de esquema XML (.xsd).O ASP.NET pode compilar esses arquivos em módulos (assemblies).
A pasta App_Code pode conter quantos arquivos e subpastas quanto você precisar.Você pode organizar seu código-fonte de qualquer forma que você achar conveniente, e ainda assim o ASP.NET compilará todo o código em um único assembly que é acessível a outros códigos em qualquer lugar no aplicativo da Web.
Observação: |
---|
Controles de usuário não são permitidos na pasta App_Code.Isso inclui controles de usuário de arquivo único e controles de usuário que usam o modelo code-behind.Colocar um controle de usuário no diretório App_Code faz com que o código do controle de usuário seja compilado fora de sua sequência necessária e, portanto, não é permitido.Observe que controles de usuário não precisam estar na pasta App_Code; eles já estão disponíveis para páginas em algum lugar no aplicativo. |
A pasta App_Code não está explicitamente marcada para conter arquivos escritos em uma dada linguagem de programação.Em vez disso, o ASP.NET infere o compilador a ser chamado para a pasta App_Code baseando-se nos arquivos da pasta.Se a pasta App_Code contiver arquivos .vb, o ASP.NET usa o compilador Visual Basic; se ele contiver arquivos .cs, o ASP.NET usa o compilador C#, e assim por diante.
Se a pasta App_Code contiver apenas arquivos onde a linguagem de programação é ambígua, como um arquivo .WSDL, o ASP.NET usa o compilador padrão para aplicativos da Web, como estabelecida no elemento compilation do aplicativo da Web ou arquivo de configuração da máquina.
Como o código-fonte na pasta App_Code é compilado em um único assembly, todos os arquivos na pasta App_Code devem estar na mesma linguagem de programação.Por exemplo, a pasta App_Code não pode incluir código-fonte de Visual Basic e C#.
Entretanto, você pode configurar o seu aplicativo da Web para tratar subpastas da pasta App_Code como unidades compiláveis separadas.Cada pasta pode então conter código-fonte em uma linguagem de programação diferente.A configuração é especificada, criando um elemento codeSubDirectories no elemento compilation do arquivo Web.config e adicionando uma referência à subpasta.O exemplo a seguir ilustra como você configuraria subpastas denominados VBCode e CSCode para compilar em módulos (assemblies) separados:
<compilation debug="false">
<codeSubDirectories>
<add directoryName="VBCode" />
<add directoryName="CSCode" />
</codeSubDirectories>
</compilation>
As referências às subpastas VBCode e CSCode não precisam incluir qualquer informação sobre a linguagem de programação que está contida na subpasta.Como com a pasta App_Code propriamente dita, o ASP.NET infere qual compilador usar baseado nos arquivos da subpasta.
Questões de segurança com código na pasta App_Code são essencialmente os mesmos que com os código na pasta Bin — o código é compilado em um assembly em tempo de execução.Um fator atenuante é que você pode ler o código-fonte dos arquivos na pasta App_Code.Entretanto, se você não compreender totalmente o código, isso ainda pode representar um risco de segurança.Portanto, trate o código-fonte na pasta App_Code como você trataria o código compilado da mesma fonte.