Esta documentação foi arquivada e não está sendo atualizada.

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ê tem o código compilado para uma classe personalizada. Você pode copiar o assembly compilado para a pasta Bin do seu aplicativo da Web e, em seguida, a classe estará disponível para todas as páginas.

Os assemblys da pasta Bin não precisam estar registrados. A presença de um arquivo .Dll na pasta Bin é o suficiente para o ASP.NET reconhecê-lo. Se você alterar a dll. e escrever uma nova versão e jogar na pasta Bin, o ASP.NET detecta a atualização e utiliza a nova versão da .dll para os pedidos enviados para a página.

Segurança com a pasta Bin

Colocar módulos compilados na a pasta Bin pode representar um risco de segurança. Se você escreveu o código e você mesmo compilou, então você sabe o que o código faz. No entanto, você deve tratar o código compilado na pasta Bin como você trataria qualquer outro código executável. Desconfie do código compilado até que você tenha testado e esteja confiante de que você entende o que ele faz.

Observe esses aspectos de segurança ao colocar o código compilado na 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 do assembly são estabelecidos pelo nível de confiança 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 ao invés do 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 escritos como arquivos tradicionais de classe - ou seja, os arquivos com extensões .vb, .cs, e assim por diante... No entanto, ela pode conter arquivos que não estão explicitamente em uma linguagem de programação específica. Exemplos incluem arquivos .WSDL (Web Services Description Language) e arquivos de esquema XML (. Xsd). O ASP.NET pode compilar esses arquivos em assemblys.

A pasta App_Code pode conter muitos arquivos e subpastas. 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çãoObservaçã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 seqüê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.

Inferência da linguagem de programação da pasta App_Code

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 chama o compilador para a pasta App_Code com base nos arquivos que ela contém. Se a pasta App_Code possuir arquivos .vb, o ASP.NET usa o compilador do Visual Basic, se ela possuir arquivos .cs, o ASP.NET usa o compilador do 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.

Linguagens de programação múltiplas na pasta App_Code

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 exempo, a pasta App_Code não pode ter código fonte em 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ê pode configurar subpastas nomeadas VBCode e CSCode para compilar em assemblys separados:

<compilation debug="false">
    <codeSubDirectories>
        <add directoryName="VBCode" />
        <add directoryName="CSCode" />
    </codeSubDirectories>
</compilation>

As referências para as subpastas VBCode e CSCode não precisam incluir qualquer informação sobre a linguagem de programação que está contida na subpasta. Tal como acontece com a pasta App_Code, o ASP.NET infere o compilador para usar com base nos arquivos da subpasta.

Segurança com a pasta App_Code

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 de arquivos na pasta App_Code. No entanto, se você não entender completamente o código, ele ainda pode representar um risco de segurança. Portanto, trate o código-fonte da pasta App_Code da mesma forma que você trataria o código compilado da mesma fonte.

Mostrar: