Ordner für freigegebenen Code in ASP.NET-Websites

Aktualisiert: November 2007

Falls Ihre Webanwendung Code enthält, den Sie für alle Seiten freigeben möchten, können Sie den Code in einem von zwei speziellen Ordnern unterhalb des Stammverzeichnisses der Web-Anwendung ablegen – dem Ordner Bin oder dem Ordner App_Code. Wenn Sie diese Ordner erstellen und darin bestimmte Dateitypen speichern, werden diese Dateien von ASP.NET auf besondere Weise behandelt.

Ordner "Bin"

Wenn Sie kompilierte Assemblys im Ordner Bin speichern, verweist anderer Code in der Webanwendung (etwa Code für Seiten) automatisch darauf. Ein typisches Beispiel ist kompilierter Code für eine benutzerdefinierte Klasse. Sie können die kompilierte Assembly in den Ordner Bin Ihrer Webanwendung kopieren, und die Klasse steht dann allen Seiten zur Verfügung.

Assemblys im Ordner Bin müssen nicht registriert werden. Das Vorhandensein einer DLL-Datei im Ordner Bin genügt, damit ASP.NET sie erkennt. Wenn Sie die .dll ändern und eine neue Version davon in den Ordner Bin legen, erkennt ASP.NET die Aktualisierung und verwendet ab dann die neue Version der .dll für Seitenaufrufe.

Sicherheit im Umgang mit dem Ordner "Bin"

Kompilierte Assemblys im Ordner Bin können ein Sicherheitsrisiko bedeuten. Wenn Sie den Code selbst geschrieben und kompiliert haben, wissen Sie, welchem Zweck er dient. Sie sollten kompilierten Code im Ordner Bin jedoch genauso behandeln wie anderen ausführbaren Code. Seien Sie behutsam mit kompiliertem Code, solange Sie ihn nicht getestet haben und genau verstanden haben, wozu er dient.

Folgende Sicherheitsaspekte sind bezüglich kompiliertem Code im Ordner Bin zu beachten:

  • Der Gültigkeitsbereich von Assemblys im Ordner Bin beschränkt sich auf die aktuelle Anwendung. Infolgedessen haben sie keinen Zugang zu Ressourcen oder Code außerhalb der aktuellen Webanwendung.

  • Zur Laufzeit bestimmt sich die Zugriffsebene einer Assembly durch die Vertrauensebene, die auf dem lokalen Computer angegeben ist. Weitere Informationen finden Sie unter ASP.NET-Vertrauensebenen und Richtliniendateien.

  • Wenn Sie in einer Entwicklungsumgebung wie Visual Studio arbeiten, wird Code im Ordner Bin in einem anderen Kontext als zur Laufzeit ausgeführt. Der Code könnte beispielsweise als voll vertrauenswürdig ausgeführt werden.

Ordner "App_Code"

Wenn Sie Quellcode im Ordner App_Code speichern, wird dieser zur Laufzeit automatisch kompiliert. Die sich ergebende Assembly ist für jeden anderen Code in der Webanwendung zugänglich. Der Ordner App_Code arbeitet also ähnlich dem Ordner Bin, mit dem Unterschied, dass in ihm Quellcode anstelle von kompiliertem Code gespeichert wird. Der Ordner App_Code und sein besonderer Status innerhalb einer ASP.NET-Webanwendung ermöglichen es, Benutzerklassen und andere reine Quellcodedateien zu erstellen und in der Webanwendung zu verwenden, ohne sie unabhängig zu kompilieren.

Der Ordner App_Code kann Quellcodedateien enthalten, die als traditionelle Klassendateien geschrieben sind, also Dateien mit .vb-Erweiterung, .cs-Erweiterung usw. Allerdings kann er auch Dateien enthalten, die nicht explizit zu einer bestimmten Programmiersprache gehören. Beispiele dafür sind WSDL-Dateien (Web Service Description Language) und XML-Schemadateien (XSD-Dateien). ASP.NET kann diese Dateien zu Assemblys kompilieren.

Der Ordner App_Code kann beliebig viele Dateien und Unterordner enthalten. Sie können Ihren Quellcode auf beliebige Weise organisieren – ASP.NET wird immer den gesamten Code in eine einzige Assembly kompilieren, die für jeden anderen Code überall in der Webanwendung zugänglich ist.

Hinweis:

Benutzersteuerelemente sind im Ordner App_Code nicht zulässig. Dies schließt sowohl Einzeldatei-Benutzersteuerelemente als auch Benutzersteuerelemente ein, die das Code-Behind-Modell verwenden. Wenn Sie ein Benutzersteuerelement im Verzeichnis App_Code ablegen, wird der Code des Benutzersteuerelements nicht in der erforderlichen Reihenfolge kompiliert. Aus diesem Grund ist dieser Vorgang nicht zulässig. Beachten Sie, dass sich Benutzersteuerelemente nicht im Ordner App_Code befinden müssen, da sie den Seiten ohnehin überall in der Anwendung zur Verfügung stehen.

Ableiten der Programmiersprache des Ordners "App_Code"

Der Ordner App_Code verfügt über keine explizite Kennzeichnung, aus der ersichtlich wird, in welcher Programmiersprache die enthaltenen Dateien geschrieben sind. Stattdessen leitet ASP.NET den aufzurufenden Compiler für den Ordner App_Code auf der Basis der enthaltenen Dateien ab. Enthält der Ordner App_Code beispielsweise VB-Dateien, verwendet ASP.NET den Visual Basic-Compiler, enthält er CS-Dateien, verwenden ASP.NET den C#-Compiler usw.

Wenn der Ordner App_Code nur Dateien enthält, deren Programmiersprache nicht eindeutig ist (z. B. WSDL-Dateien), verwendet ASP.NET den Standardcompiler für Webanwendungen, der im compilation-Element der Webanwendung oder der Computerkonfigurationsdatei (Machine.config) angegeben ist.

Mehrere Programmiersprachen im Ordner App_Code

Da der Quellcode im Ordner App_Code in eine einzige Assembly kompiliert wird, müssen alle Dateien im Ordner App_Code in derselben Programmiersprache geschrieben sein. Der Ordner App_Code darf zum Beispiel nicht Quellcode sowohl in Visual Basic als auch in C# enthalten.

Allerdings kann die Webanwendung so konfiguriert werden, dass Unterordner des Ordners App_Code als separate kompilierbare Einheiten behandelt werden. Jeder dieser Unterordner kann dann Quellcode in einer anderen Programmiersprache enthalten. Erstellen Sie für diese Konfiguration im compilation-Element der Datei Web.config ein codeSubDirectories-Element, und fügen Sie dem Unterordner einen Verweis hinzu. Im folgenden Beispiel wird gezeigt, wie die Unterordner VBCode und CSCode so konfiguriert werden, dass sie in separate Assemblys kompilieren:

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

Die Verweise auf die Unterordner VBCode und CSCode müssen keinerlei Informationen über die im Unterordner enthaltene Programmiersprache beinhalten. Ebenso wie bei dem Ordner App_Code leitet ASP.NET den benötigten Compiler von den Dateien im Unterordner ab.

Sicherheit im Umgang mit dem Ordner "App_Code"

Die Sicherheitsprobleme mit Code im Ordner App_Code sind im Prinzip die gleichen wie mit Code im Ordner Bin – der Code wird zur Laufzeit in eine Assembly kompiliert. Verbessert wird die Lage dadurch, dass Sie den Quellcode der Dateien im Ordner App_Code lesen können. Wenn Sie den Code jedoch nicht vollständig verstehen, stellt er immer noch ein Sicherheitsrisiko dar. Behandeln Sie also Quellcode im Ordner App_Code genauso wie Sie kompilierten Code aus derselben Quelle behandeln würden.

Siehe auch

Konzepte

ASP.NET-Websitelayout