AppDomain 及BuildManager

一、AppDomain.CurrentDomain.DynamicDirectory 只有在Web项目中在值,动态执行目录像下面这样

Frameworkv4.0.30319Temporary ASP.NET Files ootf2c8fa4c96cc5c53

而在Web下面AppDomain.CurrentDomain.SetupInformation 里面包裹了大量有用的信息

以下是winform的 AppDomain.CurrentDomain.SetupInformation的信息

可见SetupInformation信息更多是为web而用。(今天改一下,如果要romting 跨域操作,这部分很重要,需要自己编写代码)

setup.ShadowCopyFiles = "true";这句很重要,其作用就是启用影像复制程序集,什么是影像复制程序集,复制程序集是保证"热插拔"

实现的主要工作.AppDomain加载程序集的时候,如果没有ShadowCopyFiles,那就直接加载程序集,结果就是程序集被锁定,相反,如果启用了ShadowCopyFiles,则CLR会将准备加载的程序集拷贝一份至CachePath,再加载CachePath的这一份程序集,这样原程序集也就不会被锁定了.(http://www.cnblogs.com/kongyiyun/archive/2011/08/01/2123459.html)

而winform 这项是false

无论web还是winform 这二个路径是一样的

AppDomain.CurrentDomain.SetupInformation.ApplicationBase== AppDomain.CurrentDomain.BaseDirectory

而AppDomain.CurrentDomain.DynamicDirectory 在winform 为null 

AppDomain.CurrentDomain.BaseDirectory 在web中返回是当前的物理理路径

二、BuildManager.AddReferencedAssembly 是ASP.NET 4下的 而且我们必须预加载

我们必须从assembly级别上来使用这个attribute,也就是通常情况下我们会用在AssemblyInfo.cs中:   [assembly: PreApplicationStartMethod(typeof(SomeClassLib.Initializer), "Initialize")] 我们需要指定的是类型和类型里面静态函数的名称,这个静态函数必须是不带参数和返回值的公共函数。    这个功能最重要的地方是在于,它可以做一些我们原来在Application_Start无法完成的事情,所以很多事情在执行到Application_Start时已经完成了,不可改变的,比如下要介绍的关于编译的扩展

BuildProvider.RegisterBuildProvider     原来我们要注册BuildProvider都是通过添加web.config的<buildproviders>来完成。在ASP.NET 4.0当中,我们就可以配合PreApplicationStartMethodAttribute,在站点启动前添加自定义的来BuildProvider达到目的。     BuildManager.AddReferencedAssembly     在做.ASPX/.ASPCX和App_code目录下的代码文件编译时,需要依赖一些程序集。以前,我们都需要将这些程序集配置在web.config的<assemblies>节点下来完成。现在,你就只需要配合以上的attribute和这个新的方法,直接通过代码的形式来增加这些依赖。

原文地址:https://www.cnblogs.com/shouhongxiao/p/3512641.html