App_Code

App_Code,文件夹是·NET平台下。在创建网站时,系统为类自动放的位置。它位于Web应用程序根目录下,其存储所有应当作为应用程序的一部分动态编译的类文件。这些类文件自 动链接到应用程序,而不需要在页面中添加任何显式指令或声明来创建依赖性。App_Code文件夹中放置的类文件可以包含任何可识别的ASP.NET组件 ——自定义控件、辅助类、build提供程序、业务类、自定义提供程序、HTTP处理程序等。

注意 在开发时,对App_Code文件夹的更改会导致整个应用程序重新编译。对于大型项目,这可能不受欢迎,而且很耗时。为此,鼓励大家将代码进行模块化处理 到不同的类库中,按逻辑上相关的类集合进行组织。应用程序专用的辅助类大多应当放置在App_Code文件夹中。

App_Code文件夹中存放的所有类文件应当使用相同的语言。如果类文件使用两种或多种语言编写,则必须创建特定语言的子目录,以包含用每种语言编写的类。一旦根据语言组织这些类文件,就要在web.config文件中为每个子目录添加一个设置:

<compilation>

<codeSubDirectories>

<add directoryName="VBFolder" />

</codeSubDirectories>

</compilation>

重要的是,特定语言的子目录应在web.config文件中注册,否则,不管它们属于哪个文件夹,App_Code文件夹下 的所有文件将被编译成一个单独的程序集。上述配置脚本描述了这么一种情况,即所有的C#文件都放在App_Code文件夹的根目录下,而把几个 Visual Basic .NET类文件移入VBFolder目录中。如果<codeSubDirectories>节中提到的目录不存在,则会收到一个编译错误提 示。

App_Code根文件夹中的文件被编译成App_Code_xxx.dll程序集,其中xxx是随机生成的字符序列。一个 给定子目录中的文件将被编译成一个名为App_SubCode_xxx_yyy.dll的动态创建的程序集,其中xxx指示子目录的名称,而yyy是一个 随机字符序列。只有在应用程序根目录中的web.config文件中进行了设置,<codeSubDirectories>节才有效。

在App_Code目录或任何其他子目录中放置一个assemblyinfo.cs文件,可以创建一个强命名的程序集。显然,如果该文件夹包含Visual Basic .NET文件,那么将使用assemblyinfo.vb文件。程序集配置文件可以引用一个.snk文件来保存强名称的密钥。

注意 给一个程序集设置一个强名称,首先必须获得一个公开/私有密钥对。通过使用强名称(Strong Name)工具(sn.exe),可以获得这样一个密钥对。强名称工具是我们可以在.NET Framework的安装路径中发现的SDK binary之一。密钥对文件通常有一个.snk扩展名。可以将该文件保存到一个应用程序文件夹中,并在assemblyinfo.cs文件中引用它,如下所示:

[assembly: AssemblyKeyFileAttribute(@"yourKeyPair.snk")]

注意,Visual Basic .NET是在包含Visual Studio Solution的目录中寻找密钥文件,而C#编译器则在包含该binary的目录中寻找密钥文件。据此可知,用此属性调整我们使用的路径,或者把密钥文件放在合适的文件夹中。

在随后发生的任何重新生成中,程序集的名称将发生变化。同时,老的AppDomain请求一结束,就删除老的程序集。

App_Code文件夹并非只能包含类文件。特别是,它可以包含并能自动地处理代表数据架构的XSD文件。把一个XSD文件 添加到该文件夹中时,编译器将把它解析成一个有类型的DataSet类,并将它添加到应用程序作用域中。在ASP.NET 1.x中,这一工作由Visual Studio .NET向导,使用一个命令行实用程序(xsd.exe)完成的。

注意 使用web.config文件注册一个组件(例如,一个自定义的服务器控件或一个自定义的HTTP处理程序)时,通常要求指定包含该代码的程序集名称。如 果该组件定义在App_Code文件夹中,则应该用什么名称来指示程序集?在这种情况下,只是忽略程序集信息,并规定完整的类名即可。如果没有规定任何程 序集,则ASP.NET运行库将试图从任何已装载的程序集中装入该类,包括为App_Code文件夹动态创建的程序集。

时间: 2024-12-26 02:30:21

App_Code的相关文章

关于在App_Code文件夹自定义类中Session无法使用

由于前台页面需要调用App_Code中自定义类的函数,但在自定义类中找不到Session,解决方法如下: 新建一个类session,并自己定义函数GetSession(),引用命名空间 System.Web 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 public static class session 7 { 8 public static o

MVC 公共类App_Code不识别

.Net MVC需要写公共类的时候 右击添加 App_Code 文件夹,新建类—>右击类—>属性,生成操作 —>选择 —>编译 .net MVC项目本身是个应用程序,所以其实不需要专门起名为App_Code文件夹放入公共类,只要在项目下建类文件在那都可以,只要改成可编译的就行. 而最传统的asp.net文件系统App_Code文件夹是专门放类文件的,你放在其它地方反而不认,这两个的区别是项目的区别.

App_Code 引起的 ambiguously 问题

今天遇到了一个这样的问题,一个.net framework 4.0 的web application ,下面有一个App_Code文件夹,里面的一些公共类的build action 是 Compile ,并且类中的namespace不是预设的,结果在执行的时候,App_Code中的类, 不知道是来自Bin的dll还是App_Code自动编译的dll. 要解决这个问题一个是把App_Code 这个文件夹改一个名字就可以了,微软已经不建议按照以前App_Code的方式开发代码,App_Code是一个

ASP.NET Web网站中App_Code文件夹的作用及使用场景

原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立Web Site项目,使用过的开发者都知道,如果需要新建一个类,例如DataBase.cs.此类只服务于web页面,不适于放入网站自身类库中,因此希望其独立存在于类库之外,只是用于在web应用程序中被web页面调用.这样一来此类最好不要通过形成dll文件,并将其放入bin文件夹以供web页面调用.但

为什么引用不了App_Code里的类

在Web应用程序中不能通过右键项目-〉”添加“-〉”添加ASP.NET文件夹“方式添加 .因为Web应用程序中App_Code就不存在 . 不过可以通过手动的方式创建,添加一个文件夹命名为App_Code就可以了.这样子创建的和在网站中创建的App_Code的在外观上一样的. 先不要高兴,没有这么简单的. 你在App_Code创建类时,会发现没有智能提示.在页面后台引用时,会抱错,说不存在. 解决的办法就是选中你的类文件,在属性中”高级“中的”生成操作“默认”内容“要改为编译就可以了. 到这就可

ASP.NET 项目 App_Code下无法找到类

APP_CODE 默认情况下,VS2010中新建的WebApplication中是没有App_Code文件夹的,若需要使用,可以自己手动添加文件夹,然后将文件夹名称设置为App_Code,然后在该文件夹添加需要的类即可,但有一点需要注意的就是,右键点击文件夹下的类,选择“属性”,然后将“生成活动“的值改为”编译“,即Compile.

Type &#39;Insus.NET.PictureObject&#39; in Assembly &#39;App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null&#39; is not marked as serializable.

昨晚想实现一个功能,需要把一个对象存储于ViewState中去,但在运行时,出现下面的异常. Type 'Insus.NET.PictureObject' in Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. Description: An unhandled exception occurred during the executi

ASP.NET项目中,无法引用App_Code中的类

ASP.NET项目中,无法引用App_Code中的类 最近在做Walmart的项目,其中一个付款系统是ASP.NET编写的.遇到一个问题就是无法引用App_Code中的类. 而且在后台代码中编写代码时,也没有智能提示.生成解决方案时会报错:对应的名称空间或类型不存在或找不到. 解决办法就是选中相应类文件,在属性中设置"生成操作"(Build Action),从内容(Content)修改为编译(Compile).

App_code的引用

大家都知道在App_Code里的类,我们在引用它的时候是不需要引入命名空间的.那么为什么还是不能直接调用呢? 2 问题出在它的生成操作的方式上.具体解决方法如下: 3 我们首先找到不能引用的类文件,如下: 4 我们右击它,如下: 5 我们点击属性,如下: 6 我们把“生成操作”属性值改为“编译”,如下: 7 然后我们会发现,错误没有了,如下: