由于Web项目中的所有文件都编译为单个程序集,那么此程序集是否维护目录结构?例如,如果根目录中的文件引用子目录中的文件,那么当两个文件被编译到同一个程序集中时,该引用如何仍然有效?
假设一个Web项目具有如下所示的目录结构。
由于所有Web项目的ASPX文件都被编译成单个程序集WebProject1.dll
,因此该程序集如何能够记录/记忆目录结构?
因此,当您将WebProject1.dll
部署到Web服务器并且用户请求http://WebProject1/some_SubDir/default.aspx
时,WebProject1.dll
将如何确定要呈现的页面?
WebProject1 \ SubDir(其中WebProject1是根目录)
WebProject1 - 包含几个ASPX文件
WebProject1 \ SubDir - 包含文件 default1.aspx
。
当我们部署Web项目时,我们是否必须在Web服务器(WebProject1\SubDir
)上创建相同的目录结构,即使我们不会将任何ASPX文件放入这些目录中?
我假设在Web服务器WebProject1.dll
上应放入Bin
目录?
感谢名单
修改
只有源代码被编译到程序集中,您仍然需要将aspx文件上传到服务器上的匹配目录中。
我的书说,在使用Web项目时,所有Web代码都编译成单个程序集。我认为“所有代码”都包含aspx文件?!
通过类声明在页面和文件后面的代码之间保持链接,默认情况下,类声明位于与目录结构匹配的名称空间中
因此,如果我通过 Project - >添加新的aspx页面添加新项目,并将此aspx页面存储在名为 Hey 的子目录中,然后此页面将驻留在命名空间 WebProject1.Hey 中?
但是如何将新项目添加到子目录中,因为 Project - >添加新项没有给我一个选项来浏览和选择我希望保存的目录,而是自动在根目录中创建aspx文件?
编译器生成dll时保留相对路径。
我不确定我知道你指的是什么相对路径?
感谢名单
答案 0 :(得分:2)
只有源代码被编译到程序集中,您仍然需要将aspx文件上传到服务器上的匹配目录中。例如,Visual Studio中的项目可能如下所示:
WebProject1 (The root project)
|
|- some_SubDir (A physical directory inside the project)
|
|-default1.aspx
|-default1.aspx.cs (assuming a C# project)
编译完Web应用程序后,您需要将以下内容上传到服务器:
WebProject1 (The root directory for your website)
|
|-bin (The binary directory created by the build)
|
|-WebProject1.dll (The compiled source code of the web app)
|-some_SubDir
|
|-default1.aspx (The file that will map to the URL www.websitename.com/some_subdir/default1.aspx)
编译资源(编译和存储在程序集中的非源代码文件)是other question
中解决的不同问题编辑以添加问题的直接答案:
并非所有文件都编译到程序集中,只有源代码文件。通过类声明在页面和文件后面的代码之间保持链接,默认情况下,该声明位于与目录结构匹配的名称空间中,但不一定是。
您的default1.aspx文件将在标题中包含:
继承行告诉Web服务器,当用户请求此页面时,它应该与定义该类的源代码一起处理,它将在编译的程序集中找到。物理aspx文件和编译类的组合将生成标准html,然后传递回客户端。
是的,您需要创建相同的目录结构,但 需要将aspx文件放在那里。
是
(有人可以编辑这个,如果他们知道如何让列表项正确编号,请?)
答案 1 :(得分:1)
所有这些路径信息都将作为元数据/资源文件嵌入,因此,您可以将其安全地部署到服务器。编译器生成dll时保留相对路径。
我建议您使用Reflector打开dll,然后您可以更深入地了解dll内部的内容。
答案 2 :(得分:1)
注意some_Subdir / default1.apsx如何在页面声明中有一个'Inherits'键/值对?
这意味着当你发出对该资源的请求时,IIS会变成'啊哈! Asp.Net需要处理这个请求!嗨asp.net请给我一些html发送'
Asp.net解析该aspx文件并动态创建一个继承自WebProject1.some_Subdir._Default1的代理类。然后,这个代理类解析出控制树和html,并启动页面生命周期(这个过于简化了,我确定我错过了一些细节)。
因此,WebProject1.dll只是您的Web应用程序的实际C#/ VB,但与asp.net工作进程和标记一致,您可以将html呈现给客户端。