3 Stimmen

App_Code und web.config

Nehmen wir an, ich habe eine Klasse (MyClass.cs) in App_Code (mit einer ASP.NET-Website, nicht Projekt). Der Klasse ist kein Namespace zugewiesen.

Wie kann ich erreichen, dass diese Klasse in den .aspx-Seiten der Website gültig ist? WAS muss ich in die Datei web.config eintragen und WO muss ich es eintragen?

Soll ich <Assembly-Tag hinzufügen> oder <Typ hinzufügen>?

Da für das Assembly-Tag Version, Kultur und öffentlicher Schlüssel erforderlich sind, bin ich nicht sicher, wie diese Werte zur Kompilierungszeit lauten.

Füge ich einfach ein Typenschild hinzu? Wo setze ich es in der web.config?

EDIT: Ok, ich habe einen Teil meiner Antwort gefunden. Ich bekam den Fehler, weil " http://localhost/MyFolder " wurde im IIS nicht als "Anwendung" festgelegt. Ich habe jedoch eine Vielzahl von Ordnern, " http://localhost/MyFolder2 , http://localhost/MyFolder3 , etc...

Neue Frage: Gibt es eine Möglichkeit, MyFolder NICHT zu einer Anwendung zu machen und es trotzdem korrekt laufen zu lassen? Ich habe von einem "codesubdirectories" Tag gehört, ist das nützlich und wo würde ich es setzen? Danke!

0 Stimmen

Kumpel, hör auf, so passiv-aggressiv zu sein.

2voto

andleer Punkte 21968

In einer Website sind in Ihrem App_code-Ordner keine Namensräume erforderlich. In Ihrer web.config muss nichts auf Klassen in Ihrem app_code-Ordner verweisen.

2voto

Stephen M. Redd Punkte 5368

Dies ist einer dieser schlecht dokumentierten Aspekte der dynamischen Kompilierung, die bei der Einführung von asp.net 2.0-Websites auftraten.

Für eine tatsächliche Antwort auf Ihre spezifische Frage müssen Sie uns jedoch mehr darüber sagen, was genau Sie mit der Klasse von App_Code zu tun versuchen. In den meisten Fällen müssen Sie sich keine Gedanken über den Namespace oder den Assembly-Namen machen, um diese Klassen in Ihren Seiten zu verwenden. Sie verwenden einfach den Klassennamen, und der Compiler findet es heraus und fügt alles für Sie zusammen.

Die größten Ausnahmen, die ich in mit diesem laufen haben, sind bei der Verwendung von Web-Steuerelemente, die ich in app_code gesetzt haben. Für diese benötigen Sie eine @Register-Direktive in der aspx-Seite... und dafür benötigen Sie einen Assembly-Namen und einen Namespace.

Die Dateien in app_code werden in eine Assembly mit dem Namen "__code" kompiliert (beachten Sie, dass diese zwei Unterstriche hat, nicht einen). Diesen Namen können Sie verwenden, wenn Sie den Assembly-Namen für Register-Direktiven oder in der web.config oder ähnlichem benötigen.

Aber soweit ich weiß, können Sie eine Klasse in Registerrichtlinien oder einigen web.config-Einstellungen, die einen Namespace erfordern, nur dann verwenden, wenn Sie diese Klasse ausdrücklich in einen Namespace-Block eingeschlossen haben.

2voto

Kevin Newman Punkte 2357

Überprüfen Sie die Eigenschaften der Codedatei im Projektmappen-Explorer.

Ich hatte eine Situation, in der eine der .cs-Code-Dateien "Inhalt" für die Build-Aktion ausgewählt hatte. Alle anderen Dateien in App_Code wurden gut kompiliert, aber nicht diese eine.

Ich änderte die Build-Aktion in "Kompilieren" und es funktionierte wie erwartet.

1voto

John Saunders Punkte 159011

Ich glaube nicht, dass Sie überhaupt etwas tun müssen. So funktionieren Website-"Projekte". Alles, was in App_Code steht, wird kompiliert.

1voto

Zhaph - Ben Duguid Punkte 26343

Haben Sie versucht, den App_Code-Ordner in das Stammverzeichnis der Website zu verschieben, wie Sie es getan haben?

/App_Code
/MyFolder
/MyFolder2
/MyFolder3

Das könnte Ihr Problem lösen.

Sie könnten auch einen Blick auf Scott Guthries Tip/Trick werfen:

Erstellen von Sub-Webprojekten mit VS 2005 Web Applications

Dabei werden allerdings die Webanwendungsprojekte und nicht die Websites verwendet.

Die Betrachtung der CodeSubDirectories config-Element - Sie könnten dies wahrscheinlich verwenden - es müsste in der Root web.config definiert werden, denke ich.

Beachten Sie auch, dass die <assembly>-Referenzen nur dann Angaben zu Version, Kultur und öffentlichem Schlüssel enthalten müssen, wenn die Assemblies stark benannt sind (und daher diese Werte haben).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X