Bin 和 App_Code 文件夹介绍

如果您的 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 应用程序之外的代码。

运行时,程序集的访问级别由本地计算机上指定的信任级别确定。

如果您使用了诸如 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 文件的 <compilation> 元素中创建一个 <codeSubDirectories> 元素,然后添加一个对子文件夹的引用,即可指定该配置。下面的示例阐释如何对名为 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 文件夹中的源代码的态度必须像对待基于同样的源代码生成的已编译代码一样谨慎。

(0)

相关推荐

  • Bin 和 App_Code 文件夹介绍

    如果您的 Web 应用程序包括要在多个页之间共享的代码,您可以将代码保存在 Web 应用程序根目录下的两个特殊文件夹(Bin 文件夹和 App_Code 文件夹)中的某个文件夹中. Bin 文件夹 可以在 Bin 文件夹中存储编译的程序集,并且 Web 应用程序任意处的其他代码(如页代码)会自动引用该文件夹.典型的示例是您为自定义类编译好的代码.您可以将编译后的程序集复制到 Web 应用程序的 Bin 文件夹中,这样所有页都可以使用这个类. Bin 文件夹中的程序集无需注册.只要 .dll 文件

  • Android中主要资源文件及文件夹介绍

    在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件. 2:res文件夹里面的多个文件夹的各自介绍 res/anim/ XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 res/drawable/ .png..9.png..jpg文件

  • C#技巧之快速删除bin和obj文件夹的方法

    以下是批处理的代码: @echo offset nowPath=%cd%cd \cd %nowPath% ::delete specify file(*.pdb,*.vshost.*)for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (del %%i) ::delete specify folder(obj,bin)for /r %nowPath% %%i in (obj,bin) do (IF EXIST %%i RD /s /q %%i) echo

  • ASP.NET 保留文件夹详解

    1. Bin文件夹 Bin文件夹包含应用程序所需的,用于控件.组件或者需要引用的任何其他代码的可部署程序集.该目录中存在的任何.dll文 件将自动地链接到应用程序.如果在该文件夹中留有不用的或过期的文件,则可能出现"二义性引用(ambiguous reference)"异常的风险.换句话说,如果两个不同的程序集定义相同的类(相同的命名空间和名称),则ASP.NET运行库不能决定应该使用哪一 个程序集,从而抛出一个异常.在开发时,当我们重新命名一个项目或一个程序集的名称时,这是常见的错误

  • 多个vue项目实现共用一个node-modules文件夹

    多个vue项目共用一个node-modules文件夹 问题背景 一个目录下有多个vue项目. >> root     -- my-vueproject-a         -- package.json         -- node-modules     -- my-vueproject-b         -- package.json         -- node-modules ... 期望结果 将所有vue项目中的依赖包提取为一个 >> root     -- my-

  • Linux 下各个文件夹的结构说明及用途介绍(超详细)

    linux下各文件夹的结构说明及用途介绍: 下面给大家分享下 linux下各文件夹的结构说明及用途介绍--电子版 /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示. /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件. /sbin:系统管理命令,这 里存放的是系统管理员使用的管

  • php文件夹与文件目录操作函数介绍

    php文件夹操作函数 string basename ( string path [, string suffix] )给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉.在 Windows 中,斜线(/)和反斜线()都可以用作目录分隔符.在其它环境下是斜线(/). string dirname ( string path ) 给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名.在 Windows

  • oracle数据库导入TXT文件方法介绍

    客户端连接数据库导入 1. 安装有oracle客户端,配好监听. 2. 以oracle数据库app用户的表user_svc_info为例 <span style="color:#3333ff;">CREATE TABLE USER_SVC_INFO( PHONE varchar2(20) NOT NULL, SVC_ID varchar2(32) NOT NULL, P_USERNAME varchar2(100) NULL, USER_STATUS number NOT

  • python2.7读取文件夹下所有文件名称及内容的方法

    最近稍稍有点空闲时间,于是重新温习了一下之前学习过的python基础.废话不多说,记录一下自己的所得. 首先,安装什么的不在本人的温习范围,另,本人使用的是windows下的python2.7版本,且本人相对来说只是小白,各位看官勿喷哈. python,本身来说是一门高级编程语言,有句话怎么说来着,越是高级的程序越简单,这几句话在表面来说是正确的.python它入门简单,有基础的学起来很快就能有简单的应用,但是在非常高的抽象计算中,高级的python程序设计也是非常难学的.我之所以学它,单纯的是

  • Linux文件和文件夹权限操作方法

    Linux 文件权限 首先来查看一下当前目录下的文件内容吧 ls -l    查看当前目录下的文件列表 ls -l xxx.xxx (xxx.xxx是文件名) 查看指定的文件 我们可以看到文件的权限,-rw-rw-r--  ,一共有10位数. 其中: 最前面那个 - 代表的是类型(详细如下面贴图所示) 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可以被

随机推荐