代码改变世界

APP_CODE

2009-03-14 20:59  K-imba  阅读(358)  评论(0编辑  收藏  举报
如果您的   Web   应用程序包括要在多个页之间共享的代码,您可以将代码保存在   Web   应用程序根目录下的两个特殊文件夹(Bin   文件夹和   App_Code   文件夹)中的某个文件夹中。  
   
  Bin   文件夹  
  可以在   Bin   文件夹中存储编译的程序集,并且   Web   应用程序任意处的其他代码(如页代码)会自动引用该文件夹。典型的示例是您为自定义类编译好的代码。您可以将编译后的程序集复制到   Web   应用程序的   Bin   文件夹中,这样所有页都可以使用这个类。  
   
  Bin   文件夹中的程序集无需注册。只要   .dll   文件存在于   Bin   文件夹中,ASP.NET   就可以识别它。如果您更改了   .dll   文件,并将它的新版本写入到了   Bin   文件夹中,则   ASP.NET   会检测到更新,并对随后的新页请求使用新版本的   .dll   文件。  
   
  Bin   文件夹的安全性  
  将编译后的程序集放入   Bin   文件夹中会带来安全风险。如果是您自己编写和编译的代码,那么您了解代码的功能。但是,您必须像对待任何可执行代码一样来对待   Bin   文件夹中已编译的代码。在完成代码测试并确信已了解代码功能之前,要对已编译的代码保持谨慎的态度。  
   
  请注意以下安全方面的知识,这些知识与是否将已编译的代码放入   Bin   文件夹有关:  
   
  Bin   文件夹中程序集的作用范围为当前应用程序。因此,它们无法访问当前   Web   应用程序之外的资源或调用当前   Web   应用程序之外的代码。  
   
  运行时,程序集的访问级别由本地计算机上指定的信任级别确定。有关更多信息,请参见   ASP.NET   信任级别和策略文件。  
   
  如果您使用了诸如   Visual   Studio   这样的设计器,那么   Bin   文件夹中的代码运行所在的上下文与运行时不同。例如,代码可能以完全信任状态运行。    
   
  App_Code   文件夹  
  可以在   App_Code   文件夹中存储源代码,在运行时将会自动对这些代码进行编译。Web   应用程序中的其他任何代码都可以访问产生的程序集。因此,App_Code   文件夹的工作方式与   Bin   文件夹很类似,不同之处是您可以在其中存储源代码而非已编译的代码。App_Code   文件夹及其在   ASP.NET   Web   应用程序中的特殊地位使您可以创建自定义类和其他仅源代码文件,并在   Web   应用程序中使用它们而不必单独对它们进行编译。  
   
  App_Code   文件夹可以包含以传统类文件(即带有   .vb、.cs   等扩展名的文件)的形式编写的源代码文件。但是,它也可以包含并非明确显示出由某一特定编程语言编写的文件。例如   .wsdl(Web   服务发现语言)文件和   XML   架构   (.xsd)   文件。ASP.NET   可以将这些文件编译成程序集。  
   
  根据您的需要,App_Code   文件夹可以包含任意数量的文件和子文件夹。您可以采用任何您认为方便的方式组织源代码,ASP.NET   仍会将所有代码编译成单个程序集,并且   Web   应用程序任意处的其他代码都可以访问该程序集。  
   
  推断   App_Code   文件夹的编程语言  
  App_Code   文件夹并未显式标记为包含以任何一种编程语言编写的文件。相反,ASP.NET   是根据   App_Code   文件夹所包含的文件来推断应为   App_Code   文件夹调用哪一种编译器。如果   App_Code   文件夹包含   .vb   文件,则   ASP.NET   使用   Visual   Basic   编译器;如果包含   .cs   文件,则   ASP.NET   使用   C#   编译器,以此类推。  
   
  如果   App_Code   文件夹只包含并未明确表明编程语言的文件(如   .wsdl   文件),则   ASP.NET   将使用   Web   应用程序的默认编译器,默认编译器在   Web   应用程序或计算机配置文件的   compilation   元素中确定。  
   
  在   App_Code   文件夹中使用多种编程语言  
  因为   App_Code   文件夹中的源代码要编译成单个程序集,所以   App_Code   文件夹中的所有文件必须使用相同的编程语言编写。例如,App_Code   文件夹不能同时包含采用   Visual   Basic   和   C#   编写的源代码。    
   
  但是,您可以对   Web   应用程序进行配置,使其将   App_Code   文件夹的子文件夹作为独立的可编译单元处理。这样,每一个文件夹就可以包含以不同编程语言编写的源代码。通过在   Web.config   文件的   codeSubDirectories   元素中创建一个   compilation   元素,然后添加一个对子文件夹的引用,即可指定该配置。下面的示例阐释如何对名为   VBCode   和   CSCode   的子文件夹进行配置,使其编译成不同的程序集:  
   
    复制到剪贴板<compilation   debug="false">  
          <codeSubDirectories>  
                  <add   directoryName="VBCode"   />  
                  <add   directoryName="CSCode"   />  
          </codeSubDirectories>  
  </compilation>  
  请注意,对   VBCode   和   CSCode   子文件夹的引用并未包括任何有关子文件夹中所包含的编程语言的信息。就像对待   App_Code   文件夹本身一样,ASP.NET   会根据子文件夹中的文件来推断要使用的编译器。  
   
  App_Code   文件夹的安全性  
  App_Code   文件夹中的代码存在的安全问题基本上与   Bin   文件夹中的代码存在的安全问题相同   -   代码都会在运行时编译成程序集。比   Bin   文件夹要好一些的是,您可以阅读   App_Code   文件夹中文件的源代码。但是,如果您不能完全理解代码,仍然会存在安全风险。因此,对待   App_Code   文件夹中的源代码的态度必须像对待基于同样的源代码生成的已编译代码一样谨慎。