Classes residentes em App_Code não estão acessíveis


197

Eu criei um site no ASP.NET e criei uma classe e coloquei dentro da pasta App_Code. No entanto, não consigo acessar isso em minhas outras páginas. Algo precisa ser configurado para permitir isso? Eu fiz isso funcionar em projetos anteriores, mas não neste, de alguma forma.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}

1
Presumo que você esteja incluindo o namespace em suas páginas da web?
Alex Czarto # 03/08

Respostas:


638

Clique com o botão direito do mouse no .csarquivo na App_Codepasta e verifique suas propriedades.

Verifique se a "Ação de compilação" está definida como "Compilar".


10
Como você pode definir isso como a ação de compilação padrão? ou eu tenho que fazer isso para cada arquivo na pasta App_Code?
Malachi

3
Por que não posso fazer isso no Visual Studio 2012 ?!
RSK 31/01

4
Isso parece ser um bug no VS2012. Também acontece comigo.
James prego

2
para aqueles que querem obter mais detalhes você pode encontrar em: how-to-code-net.blogspot.ro/2014/04/...
Alexa Adrian

3
Yay isso resolveu 142 erros no meu projeto Visual Studio, muito obrigado por compartilhar esta solução: -]
Michael G. Workman

14

Coloque isso na parte superior dos outros arquivos em que você deseja acessar a classe:

using CLIck10.App_Code;

OU acesse a classe de outros arquivos como este:

CLIck10.App_Code.Glob

Não tenho certeza se esse é o seu problema ou não, mas se você era novo em C #, é fácil resolver esse problema.

Atualização: Descobri recentemente que, se eu adicionar uma pasta App_Code a um projeto, devo fechar / reabrir o Visual Studio para que ele reconheça adequadamente essa pasta "especial".


1
Tinha algo a ver com a ação de construção, pelo jeito - a resposta de FailBoy resolveu o problema. Obrigado por responder de qualquer maneira :)
Malaquias

Bom, que funcionou quando adicionei um espaço para nome à classe na pasta App_Code.
Mashtheweb #

Por que precisamos incluir o namespace assim? Por que o intelliSense não pode acessar essa classe sem especificar o nome da pasta?
Elham Kohestani # 9/17

10

Vá para a página de onde você deseja acessar a classe App_code e adicione o espaço para nome da classe app_code. Você precisa fornecer uma usingdeclaração, da seguinte maneira:

using WebApplication3.App_Code;

Depois disso, você precisará acessar a propriedade da classe app_code e definir a 'Ação de compilação' como 'Compilar'.


4

verifique se você está usando o mesmo espaço de nome que suas páginas


1
Mas por que quando está em APP_CODE? Eu pensei que qualquer coisa lá com classes PUBLIC deveria ser exposta automaticamente em toda a solução !?
Fandango68

4

Ainda não descobri por que isso ocorre, mas eu tinha classes na minha App_Codepasta que estavam chamando métodos uma na outra, e fui bem ao fazer isso quando criei um projeto .NET 4.5.2, mas tive que reverta-o para 4.0, pois o servidor de destino não estava sendo atualizado. Foi quando eu encontrei esse problema (depois de corrigir o langversionno meu web.config de 6 a 5 ... outra história) ....

Um dos meus métodos continuava tendo um erro como:

The type X.Y conflicts with the imported type X.Y in MyProject.DLL

Todas as minhas classes já estavam definidas como "Compilar" em suas propriedades, conforme sugerido na resposta aceita aqui, e cada uma tinha um espaço para nome comum que era o mesmo e cada uma using MyNamespace;no topo de cada classe.

Descobri que se eu apenas movesse as classes ofensivas que precisavam chamar métodos uma para a outra pasta padrão chamada algo diferente de "App_Code", elas parariam de ter esse problema de conflito.

Nota : Se você criar uma pasta padrão chamada "AppCode", mova suas classes para ela, exclua a pasta "App_Code" e renomeie "AppCode" para "App_Code", seus problemas retornarão. Não importa se você usa a opção "Nova pasta" ou "Adicionar pasta ASP .NET" para criar "App_Code" - parece digitar o nome.

Talvez este seja apenas um problema do .NET 4.0 (e possivelmente anterior) ... Eu estava bem no 4.5.2 antes de ter que reverter!


0

Achei mais fácil mover os arquivos para um projeto separado da Biblioteca de Classes e, em seguida, referenciá-lo no projeto da web e aplicar o espaço para nome na usingseção do arquivo. Por algum motivo, as outras soluções não estavam funcionando para mim, mas essa solução funcionou.


0

No meu caso, não consegui criar um projeto com as classes definidas na pasta App_Code.

Não é possível replicar o cenário precisamente para comentar, mas foi necessário fechar e reabrir o visual studio para que o intellisense cooperasse de acordo ...

Percebi que, quando uma classe na pasta App_Code é definida como 'Compilar' em vez de 'Conteúdo' (clique com o botão direito do mouse), os erros eram provenientes de uma segunda versão da classe ... Olhe para a esquerda mais 3 dos 3 campos entre o painel de código e a guia. O 'outro' foi chamado de algo como 10_App_Code ou similar.

Para corrigir o problema, renomeei a pasta de App_Code para Code, defina explicitamente os namespaces nas classes e defino todas as classes para 'Compilar'

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.