Le classi residenti in App_Code non sono accessibili


198

Ho creato un sito Web in ASP.NET e ho creato una classe e l'ho inserito nella cartella App_Code. Tuttavia non posso accedervi dalle altre mie pagine. È necessario configurare qualcosa per consentirlo? L'ho fatto funzionare in progetti precedenti, ma non in questo, in qualche modo.

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

1
Presumo che tu stia includendo lo spazio dei nomi nelle tue pagine web?
Alex Czarto,

Risposte:


639

Fare clic con il tasto destro sul .csfile nella App_Codecartella e verificarne le proprietà.

Assicurati che "Costruisci azione" sia impostato su "Compila".


10
Come puoi impostarlo come azione di compilazione predefinita? o devo farlo per ogni file nella cartella App_Code?
Malachi,

3
Perché non posso farlo in Visual Studio 2012 ??!
RSK

4
Questo sembra essere un bug in VS2012. Succede anche a me.
James Nail,

2
per coloro che desiderano maggiori dettagli, consultare: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian,

3
Sì, questo ha risolto 142 errori nel mio progetto Visual Studio, grazie mille per aver condiviso questa soluzione: -]
Michael G. Workman,

14

Metti questo nella parte superiore degli altri file in cui si desidera accedere alla classe:

using CLIck10.App_Code;

OPPURE accedi alla classe da altri file come questo:

CLIck10.App_Code.Glob

Non sono sicuro se questo è il tuo problema o no, ma se eri nuovo in C #, allora questo è facile su cui inciampare.

Aggiornamento: di recente ho scoperto che se aggiungo una cartella App_Code a un progetto, allora devo chiudere / riaprire Visual Studio affinché riconosca correttamente questa cartella "speciale".


1
Era qualcosa a che fare con l'azione di costruzione dal suo aspetto: la risposta di FailBoy ha risolto il problema. Grazie per aver risposto comunque :)
Malachi,

Bello quello che ha funzionato quando ho aggiunto uno spazio dei nomi alla classe nella cartella App_Code.
mashtheweb,

Perché dobbiamo includere namspace in quel modo? Perché intelliSense non è in grado di accedere a quella classe senza specificare il nome della cartella?
Elham Kohestani,

10

Passare alla pagina da cui si desidera accedere alla classe App_code, quindi aggiungere lo spazio dei nomi della classe app_code. Devi fornire una usingdichiarazione, come segue:

using WebApplication3.App_Code;

Successivamente, dovrai andare alla proprietà della classe app_code e impostare "Build Action" su "Compile".


4

assicurati di utilizzare lo stesso spazio dei nomi delle tue pagine


1
Ma perché quando è in APP_CODE? Ho pensato che qualsiasi cosa con le classi PUBBLICHE dovesse essere esposta automaticamente in tutta la soluzione !?
Fandango68,

4

Non ho ancora capito perché questo si verifichi, ma avevo delle classi nella mia App_Codecartella che chiamavano metodi l'una nell'altra e andavo bene così quando ho creato un progetto .NET 4.5.2, ma poi ho dovuto ripristinalo a 4.0 poiché il server di destinazione non è stato aggiornato. Questo è quando ho trovato questo problema (dopo aver risolto il langversionmio web.config da 6 a 5 ... un'altra storia) ....

Uno dei miei metodi continuava ad avere un errore come:

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

Tutte le mie classi erano già impostate su "Compila" nelle loro proprietà, come suggerito nella risposta accettata qui, e ognuna aveva uno spazio dei nomi comune che era lo stesso, e ognuna era using MyNamespace;in cima a ciascuna classe.

Ho scoperto che se avessi appena spostato le classi offensive che dovevano chiamare metodi l'un l'altro in un'altra cartella standard denominata con un nome diverso da "App_Code", avrebbero smesso di avere questo problema di conflitto.

Nota : se si crea una cartella standard denominata "AppCode", spostare le classi in essa, eliminare la cartella "App_Code", quindi rinominare "AppCode" in "App_Code", i problemi torneranno. Non importa se si utilizza l'opzione "Nuova cartella" o "Aggiungi cartella ASP .NET" per creare "App_Code" - sembra digitare il nome.

Forse questo è solo un problema di .NET 4.0 (e forse prima) ... Stavo bene in 4.5.2 prima di dover tornare indietro!


0

Ho trovato più semplice spostare i file in un progetto Libreria di classi separato, quindi fare riferimento a quel progetto nel progetto Web e applicare lo spazio dei nomi nella usingsezione del file. Per qualche ragione le altre soluzioni non funzionavano per me, ma questo lavoro ha funzionato.


0

Nel mio caso, non sono riuscito a creare un progetto con le classi definite nella cartella App_Code.

Non è possibile replicare esattamente lo scenario per commentare, ma è stato necessario chiudere e riaprire Visual Studio affinché intellisense collaborasse ...

Ho notato che quando una classe nella cartella App_Code è impostata su "Compila" anziché "Contenuto" (fai clic con il pulsante destro del mouse) che gli errori provenivano da una seconda versione della classe ... Guarda a sinistra della 3 dei 3 campi tra il riquadro del codice e la scheda. L'altro è stato chiamato in modo simile a 10_App_Code o simile.

Per correggere il problema, ho rinominato la cartella da App_Code a Code, ho impostato esplicitamente gli spazi dei nomi sulle classi e ho impostato tutte le classi su "Compila"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.