asp.net 网站和默认命名空间以及 LINQ Datacontext 第 2 部分

问题描述 投票:0回答:1

让我尝试从不同的角度问这个问题。

我注意到,每次使用“网站”模型在浏览器中呈现 aspx 页面时,都会在临时 ASP.NET 文件中“即时”创建一个随机程序集。分析 Reflector 中的程序集表明,为任何给定 .aspx 文件创建的类都位于“ASP”命名空间下。

因此,从一个空的“Temporary ASP.NET Files”目录开始,我在 VS2008 中打开我的 ASP.NET“网站”,并启动了默认页面。我立即观察到该文件夹内生成了一个随机目录。顺着路径走下去,我发现创建了 2 个 DLL:App_Code.1lywsqqz.dll 和 App_Web_iohekame.dll。我假设网站中的所有 .aspx 页面都被编译为 App_Web dll,并且 App_Code 文件夹中的所有内容都被编译为 App_Code.dll。

因此,如果我的 App_Code C#/VB.net 文件位于“ASP”命名空间下,并且我的 App_Web 文件是在“ASP”命名空间下创建的,为什么我仍然收到错误“无法加载类型‘ASP.NothwindDataContext’?

有人说“你不需要 App_Code 文件夹中的命名空间”,但我尝试了,但仍然得到“无法加载类型‘NorthwindDataContext’”。

那么 App_Code 文件夹、网站的其余部分和命名空间之间发生了什么?

编辑: 这是我的 .aspx 文件中的 LinqDataSource:

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

“NorthwindDataContext”和“ASP.NorthwindDataContext”都不起作用。

asp.net namespaces app-code
1个回答
4
投票

App_Code
C# 源文件中的类型,就像任何 C# 文件一样,不会被放入特定的命名空间中,除非由
namespace Name {...}
周围明确声明。因此,在
MyClass
中声明的类
App_Code
将具有完全限定的类型名称
MyClass
。就这样。

您可以在

Web.config
中将其引用为:
"MyClass, App_Code"

旁注: 当您在

App_Code
中使用 DBML 时,生成的类的命名空间在该文件中定义(打开 DBML 文件时查看属性窗口)。如果您在该文件中指定名称空间,那么您的类自然会在该名称空间中定义。请注意,这与我上面所说的并不矛盾。问题是,LINQ 数据上下文生成器处理文件并在特定命名空间中定义类。

© www.soinside.com 2019 - 2024. All rights reserved.