Bin 和 App_Code 文件夹介绍

时间:2021-05-28

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

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

如果您使用了诸如VisualStudio这样的设计器,那么Bin文件夹中的代码运行所在的上下文与运行时不同。例如,代码可能以完全信任状态运行。

App_Code文件夹

可以在App_Code文件夹中存储源代码,在运行时将会自动对这些代码进行编译。Web应用程序中的其他任何代码都可以访问产生的程序集。因此,App_Code文件夹的工作方式与Bin文件夹很类似,不同之处是您可以在其中存储源代码而非已编译的代码。App_Code文件夹及其在ASP.NETWeb应用程序中的特殊地位使您可以创建自定义类和其他仅源代码文件,并在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使用VisualBasic编译器;如果包含.cs文件,则ASP.NET使用C#编译器,以此类推。

如果App_Code文件夹只包含并未明确表明编程语言的文件(如.wsdl文件),则ASP.NET将使用Web应用程序的默认编译器,默认编译器在Web应用程序或计算机配置文件的<compilation>元素中确定。

在App_Code文件夹中使用多种编程语言

因为App_Code文件夹中的源代码要编译成单个程序集,所以App_Code文件夹中的所有文件必须使用相同的编程语言编写。例如,App_Code文件夹不能同时包含采用VisualBasic和C#编写的源代码。

但是,您可以对Web应用程序进行配置,使其将App_Code文件夹的子文件夹作为独立的可编译单元处理。这样,每一个文件夹就可以包含以不同编程语言编写的源代码。通过在Web.config文件的<compilation>元素中创建一个<codeSubDirectories>元素,然后添加一个对子文件夹的引用,即可指定该配置。下面的示例阐释如何对名为VBCode和CSCode的子文件夹进行配置,使其编译成不同的程序集:

<compilationdebug="false"><codeSubDirectories><adddirectoryName="VBCode"/><adddirectoryName="CSCode"/></codeSubDirectories></compilation>

请注意,对VBCode和CSCode子文件夹的引用并未包括任何有关子文件夹中所包含的编程语言的信息。就像对待App_Code文件夹本身一样,ASP.NET会根据子文件夹中的文件来推断要使用的编译器。

App_Code文件夹的安全性

App_Code文件夹中的代码存在的安全问题基本上与Bin文件夹中的代码存在的安全问题相同-代码都要编译成程序集并在运行时执行。比Bin文件夹要好一些的是,您可以阅读App_Code文件夹中文件的源代码。但是,如果您不能完全理解代码,仍然会存在安全风险。因此,对待App_Code文件夹中的源代码的态度必须像对待基于同样的源代码生成的已编译代码一样谨慎。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章