程序集是否维护其目录结构?

时间:2009-04-24 18:11:12

标签: c# asp.net assemblies asp.net-2.0

  1. 由于Web项目中的所有文件都编译为单个程序集,那么此程序集是否维护目录结构?例如,如果根目录中的文件引用子目录中的文件,那么当两个文件被编译到同一个程序集中时,该引用如何仍然有效?

  2. 假设一个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

  3. 当我们部署Web项目时,我们是否必须在Web服务器(WebProject1\SubDir)上创建相同的目录结构,即使我们不会将任何ASPX文件放入这些目录中?

  4. 我假设在Web服务器WebProject1.dll上应放入Bin目录?

  5. 感谢名单


    修改


      

    只有源代码被编译到程序集中,您仍然需要将aspx文件上传到服务器上的匹配目录中。

    我的书说,在使用Web项目时,所有Web代码都编译成单个程序集。我认为“所有代码”都包含aspx文件?!


      

    通过类声明在页面和文件后面的代码之间保持链接,默认情况下,类声明位于与目录结构匹配的名称空间中

         

    因此,如果我通过 Project - >添加新的aspx页面添加新项目,并将此aspx页面存储在名为 Hey 的子目录中,然后此页面将驻留在命名空间 WebProject1.Hey 中?

    但是如何将新项目添加到子目录中,因为 Project - >添加新项没有给我一个选项来浏览和选择我希望保存的目录,而是自动在根目录中创建aspx文件?


      

    编译器生成dll时保留相对路径。

    我不确定我知道你指的是什么相对路径?


    感谢名单

3 个答案:

答案 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

中解决的不同问题

编辑以添加问题的直接答案:

  1. 并非所有文件都编译到程序集中,只有源代码文件。通过类声明在页面和文件后面的代码之间保持链接,默认情况下,该声明位于与目录结构匹配的名称空间中,但不一定是。

  2. 您的default1.aspx文件将在标题中包含:

  3. 继承行告诉Web服务器,当用户请求此页面时,它应该与定义该类的源代码一起处理,它将在编译的程序集中找到。物理aspx文件和编译类的组合将生成标准html,然后传递回客户端。

    1. 是的,您需要创建相同的目录结构,但 需要将aspx文件放在那里。

    2. (有人可以编辑这个,如果他们知道如何让列表项正确编号,请?)

答案 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呈现给客户端。