Auf Klassen in App_Code kann nicht zugegriffen werden

197

Ich habe eine Website in ASP.NET erstellt, eine Klasse erstellt und in den Ordner App_Code eingefügt. Ich kann jedoch von meinen anderen Seiten nicht darauf zugreifen. Muss etwas konfiguriert werden, um dies zu ermöglichen? Ich habe es in früheren Projekten zum Laufen gebracht, aber irgendwie nicht in diesem.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
Malachi
quelle
1
Ich nehme an, Sie fügen den Namespace in Ihre Webseiten ein.
Alex Czarto
1
Mögliches Duplikat - stackoverflow.com/questions/409070/…
vapcguy

Antworten:

636

Klicken Sie mit der rechten Maustaste auf die .csDatei im App_CodeOrdner und überprüfen Sie deren Eigenschaften.

Stellen Sie sicher, dass "Build Action" auf "Compile" eingestellt ist.

StevenMcD
quelle
10
Wie können Sie dies als Standard-Build-Aktion festlegen? oder muss ich das für jede Datei im App_Code-Ordner tun?
Malachi
3
Warum kann ich das in Visual Studio 2012 nicht tun?
RSK
4
Dies scheint ein Fehler in VS2012 zu sein. Passiert mir auch.
James Nail
2
Für diejenigen, die mehr Details wünschen, finden Sie unter: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian
3
Yay dies löste 142 Fehler in meinem Visual Studio-Projekt, vielen Dank für das Teilen dieser Lösung: -]
Michael G. Workman
14

Fügen Sie dies oben in die anderen Dateien ein, in denen Sie auf die Klasse zugreifen möchten:

using CLIck10.App_Code;

ODER greifen Sie von anderen Dateien wie folgt auf die Klasse zu:

CLIck10.App_Code.Glob

Ich bin mir nicht sicher, ob das Ihr Problem ist oder nicht, aber wenn Sie neu in C # waren, ist dies ein leichtes Problem.

Update: Ich habe kürzlich festgestellt, dass ich, wenn ich einem Projekt einen App_Code-Ordner hinzufüge, Visual Studio schließen / erneut öffnen muss, damit es diesen "speziellen" Ordner richtig erkennt.

AaronLS
quelle
1
Es hatte anscheinend etwas mit der Build-Aktion zu tun - FailBoys Antwort löste das Problem. Danke, dass du trotzdem geantwortet hast :)
Malachi
Schön, dass es funktioniert hat, als ich der Klasse im Ordner App_Code einen Namespace hinzugefügt habe.
Mashtheweb
Warum müssen wir den Namspace so einfügen? Warum kann IntelliSense nicht auf diese Klasse zugreifen, ohne den Namen des Ordners anzugeben?
Elham Kohestani
10

Wechseln Sie zu der Seite, von der aus Sie auf die App_code-Klasse zugreifen möchten, und fügen Sie den Namespace der app_code-Klasse hinzu. Sie müssen eine usingErklärung wie folgt abgeben:

using WebApplication3.App_Code;

Danach müssen Sie zur Eigenschaft app_code class gehen und die 'Build Action' auf 'Compile' setzen.

user3363647
quelle
4

Stellen Sie sicher, dass Sie denselben Namespace wie Ihre Seiten verwenden


quelle
1
Aber warum, wenn es in APP_CODE ist? Ich dachte, irgendetwas mit PUBLIC-Klassen sollte in der gesamten Lösung automatisch verfügbar gemacht werden!?
Fandango68
4

Ich habe noch nicht herausgefunden, warum dies auftritt, aber ich hatte Klassen in meinem App_CodeOrdner, die Methoden ineinander aufriefen, und dies war in Ordnung, als ich ein .NET 4.5.2-Projekt erstellte, aber dann musste ich Setzen Sie es auf 4.0 zurück, da der Zielserver nicht aktualisiert wurde. langversionDann habe ich dieses Problem gefunden (nachdem ich die in meiner web.config von 6 auf 5 behoben habe ... eine andere Geschichte) ....

Eine meiner Methoden hatte immer wieder einen Fehler wie:

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

Alle meine Klassen waren in ihren Eigenschaften bereits auf "Kompilieren" eingestellt, wie in der hier akzeptierten Antwort vorgeschlagen, und jede hatte einen gemeinsamen Namespace, der gleich war, und jede hatte using MyNamespace;oben in jeder Klasse.

Ich stellte fest, dass dieses Konfliktproblem nicht mehr auftrat, wenn ich nur die fehlerhaften Klassen, die Methoden ineinander aufrufen mussten, in einen anderen Standardordner mit dem Namen "App_Code" verschob.

Hinweis : Wenn Sie einen Standardordner mit dem Namen "AppCode" erstellen, Ihre Klassen in diesen Ordner verschieben, den Ordner "App_Code" löschen und "AppCode" in "App_Code" umbenennen, treten Ihre Probleme erneut auf. Es spielt keine Rolle, ob Sie die Option "Neuer Ordner" oder "ASP .NET-Ordner hinzufügen" verwenden, um "App_Code" zu erstellen - es scheint, als würde der Name eingegeben.

Vielleicht ist dies nur ein .NET 4.0 (und möglicherweise früheres) Problem ... In 4.5.2 ging es mir gut, bevor ich zurückkehren musste!

vapcguy
quelle
0

Ich fand es einfacher, die Dateien in ein separates Klassenbibliotheksprojekt zu verschieben und dann auf dieses Projekt im Webprojekt zu verweisen und den Namespace im usingAbschnitt der Datei anzuwenden . Aus irgendeinem Grund funktionierten die anderen Lösungen nicht für mich, aber diese Umgehung funktionierte.

Zarepheth
quelle
0

In meinem Fall konnte ich kein Projekt zum Erstellen mit Klassen erstellen, die im Ordner App_Code definiert sind.

Ich kann das Szenario nicht präzise replizieren, um es zu kommentieren, musste aber das visuelle Studio schließen und erneut öffnen, damit Intellisense zusammenarbeiten kann ...

Ich habe festgestellt, dass die Fehler von einer zweiten Version der Klasse stammen, wenn eine Klasse im Ordner "App_Code" auf "Kompilieren" anstelle von "Inhalt" gesetzt ist (klicken Sie mit der rechten Maustaste darauf) 3 der 3 Felder zwischen dem Codebereich und der Registerkarte. Der 'andere' wurde so etwas wie 10_App_Code oder ähnliches genannt.

Um das Problem zu beheben, habe ich den Ordner von App_Code in Code umbenannt, Namespaces für die Klassen explizit festgelegt und alle Klassen auf 'Compile' gesetzt.

hngr18
quelle