2009-03-22 3 views
0

Lassen Sie mich versuchen, diese Frage aus einem anderen Blickwinkel zu stellen.asp.net Websites und Standard-Namespaces und LINQ Datacontext Teil 2

Ich bemerkte, dass jedes Mal, wenn eine Aspx-Seite im Browser gerendert wird, die das "Website" -Modell verwendet, eine zufällige Assembly in den temporären ASP.NET-Dateien "on-the-fly" erstellt wird. Das Analysieren der Assembly in Reflector zeigt, dass die für eine beliebige ASPX-Datei erstellte Klasse unter dem Namespace "ASP" ist.

So begann ich mit einem leeren "Temporary ASP.NET Files" -Verzeichnis, ich öffnete meine ASP.NET "-Website" in VS2008 und startete die Standardseite. Sofort habe ich beobachtet, dass ein zufälliges Verzeichnis in diesem Ordner erstellt wurde. Während ich den Pfad hinunter ging, fand ich 2 DLLs erstellt: App_Code.1lywsqqz.dll und App_Web_iohekame.dll. Ich nehme an, dass alle ASPX-Seiten in der Website in App_Web-DLL kompiliert werden und alles in App_Code-Ordner in App_Code.dll kompiliert wird.

Also, wenn meine App_Code C#/VB.net Dateien sind unter dem "ASP" Namespace, und meine App_Web-Dateien sind unter dem "ASP" Namespace, wie bekomme ich immer noch eine Fehlermeldung "Konnte nicht Typ 'ASP laden. NothwindDataContext '?

sagte jemand ‚Sie nicht Namespaces müssen im Ordner App_Code‘, aber ich versuchte es ohne und immer noch ‚Typ konnte nicht geladen werden‚NorthwindDataContext‘‘.

Also, was los ist die zwischen App_Code Ordner, der Rest der Website und Namespaces?

EDIT: Hier ist meine LinqDataSource in meinem .aspx Datei:

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="NothwindDataContext" EnableUpdate="True" 
    TableName="Categories"> 
</asp:LinqDataSource> 

Weder "NorthwindDataContext", noch "ASP.NorthwindDataContext" funktioniert.

Antwort

4

Typen in App_Code C# -Quelldateien werden, genau wie jede C# -Datei, nicht in einen bestimmten Namespace eingefügt, es sei denn, sie wurden speziell von namespace Name {...} um sie herum deklariert. Eine Klasse MyClass, die in App_Code deklariert ist, hat den vollqualifizierten Typnamen MyClass. Nur das.

Sie können in Web.config als verweisen: "MyClass, App_Code".

Randbemerkung: Wenn Sie eine DBML in App_Code verwenden, werden die Namespace von generierten Klassen in dieser Datei definiert (Blick auf das Eigenschaften-Fenster, wenn DBML Datei geöffnet ist). Wenn Sie in dieser Datei einen Namespace angeben, werden Ihre Klassen natürlich in diesem Namespace definiert. Beachten Sie, dass dies nicht im Widerspruch zu dem steht, was ich oben gesagt habe. Die Sache ist, der LINQ-Datenkontextgenerator verarbeitet die Datei und definiert die Klassen in dem spezifischen Namespace.

+0

Also, haben Sie einen Eintrag in Web.config für jede Klasse in App_Code? Können Sie mir ein komplettes Beispiel web.config geben? Vielen Dank. – Robert4Real

+0

Nein! Ganz und gar nicht. Ich sagte das nur, * falls du es brauchst *. –

+0

Benötige ich auch eine "#imports ...." - Anweisung in meinem ASPX? – Robert4Real