AppDomain 及BuildManager
一、AppDomain.CurrentDomain.DynamicDirectory 只有在Web项目中在值,动态执行目录像下面这样
Framework\v4.0.30319\Temporary ASP.NET Files\root\f2c8fa4c\96cc5c53
而在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和这个新的方法,直接通过代码的形式来增加这些依赖。
AppDomain 及BuildManager的更多相关文章
- AppDomain.CurrentDomain.GetAssemblies()
AppDomain.CurrentDomain.GetAssemblies() ,获取已加载到此应用程序域的执行上下文中的程序集 解释地址 从微软的解释也可以得知,这个方法只能获取已经加载到此应用程序 ...
- AppDomain对于静态对象的独享引用
AppDomain可以理解为一个独立的沙箱,当有独立的第静态对象在appDomain中被访问时,会在appDomain中产生独立的内存对象.比如appDomain1 appDomain2同时对 静态对 ...
- AppDomain 详解(转)
AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制. 每一个AppDomain可以单独运行.停止:每个AppDo ...
- 同一AppDomain内的SharpGL的FrameBuffer会相互影响?
同一AppDomain内的SharpGL的FrameBuffer会相互影响? 今天做一个试验时,偶然发现了这样一个问题. 以SharpGL的示例项目SimpleDrawingSample为例. 给Fo ...
- C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法
// 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名System.Diagnostics.Proces ...
- 【C#进阶系列】22 CLR寄宿和AppDomain
关于寄宿和AppDomain 微软开发CLR时,将它实现成包含在一个DLL中的COM服务器. 任何Windows应用程序都能寄宿(容纳)CLR.(简单来讲,就是CLR在一个DLL中,通过引用这个DLL ...
- Failed to create AppDomain 'xxx'. Exception has been Failed to create AppDomain
一服务器上的数据库全部被置于紧急模式(EMERGENCY),在错误日志里面能看到大量下面的错误 Failed to create AppDomain "YourSQLDba.dbo[runt ...
- .NET跨AppDomain访问对象
什么是AppDomain? 我们都知道windows进程,它起到应用程序隔离的作用,带来的好处是,当某个进程发生错误的时候,不会影响其他的进程,系统也不会受到影响.但是,创建windows进程的代价是 ...
- 卸载AppDomain动态调用DLL异步线程执行失败
应用场景 动态调用DLL中的类,执行类的方法实现业务插件功能 使用Assembly 来实现 但是会出现逻辑线程数异常的问题 使用AppDomain 实现动态调用,并卸载. 发现问题某个插件中开启异步线 ...
随机推荐
- cookie创建,删除
Cookie 历来指就着牛奶一起吃的点心.然而,在因特网内,“Cookie”这个字有了完全不同的意思.那么“Cookie”到底是什么呢?“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览 ...
- AngularJS入门第一课
1.ng-app=" " 定义angularJS的使用范围: 2.ng-init="变量=值;变量='值'" 初始化变量的值,有多个变量时,中间用分号隔 ...
- nodeJS之TCP模块net
前面的话 TCP服务在网络应用中十分常见,目前大多数的应用都是基于TCP搭建而成的.net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法.本文将详细介绍nodeJS ...
- C# 委托的理解
1.什么是委托 委托可以理解为持有一个或多个方法的对象.如果执行委托的话,委托会 执行它所"持有"的方法.委托可以避免程序中大量使用if-else语句,使 程序拥有更好的扩展性. ...
- 使用Mingw编译wxSqlite3-3.0.5
最近在学习wxWidgets,而且官方也出了3.0版本,貌似还不错的样子,准备做个小程序来练手.中间需要用到数据库看到很多人推荐wxSqlite3就去下来看看,以下是我使用TDM-GCC 4.8.1( ...
- std::cin>>
cin>> 不吃最后的回车换行,字符串自动补'\0'与最后回车换行无关 时常忘记,紧记!
- 软件开发项目云端All-In-One体验
如今在软件开发圈里混,Agile,DevOps,Cloud是大家经常挂在嘴边的词,其实大家各自都有在应用层上的经验,但是如何把三者很好的结合起来,这是所有项目管理者困惑和需要的问题. Agile让我们 ...
- 第二章完结,包含exam练习
正则方程(Normal Equation) 梯度下降是最小化代价函数\(J(\theta)\)的一种方式,这里提出了另一种方式即正则方式不使用迭代方式:\(\theta = (X^TX)^{-1}X^ ...
- 流畅的python学习笔记:第三章
字典的变种: OrderedDict 首先来看下面的代码,在一个字典中,有name,age,city,在遍历这个字典的时候.顺序却是随机的,不是按照我们添加的顺序也就是name->age-> ...
- Thinkphp模板的使用
模板标签 内置标签:include,import,volist,foreach,for,switch,compare,present,empty,defined,if/else 输出php代码:PHP ...