AppDomain.Unload_MarshalByRefObject】的更多相关文章

internal string GetClassInfo(string assemblyName, string className, string strField) { string ret = strField; if (!String.IsNullOrEmpty(assemblyName) && !String.IsNullOrEmpty(className)) { string callingDomainName = AppDomain.CurrentDomain.Friendl…
AppDomain可以理解为一个独立的沙箱,当有独立的第静态对象在appDomain中被访问时,会在appDomain中产生独立的内存对象.比如appDomain1 appDomain2同时对 静态对象A有引用时,appDomain1.A与appDomain2.A是两个对象. 1. 静态对象属性 public class StaticModel { public static int IndexTest; } 2. public class myClass { public int index;…
AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制. 每一个AppDomain可以单独运行.停止:每个AppDomain有自己默认的异常处理:一个AppDomain的运行失败不会影响到其他的AppDomain. CLR在被CLR Host(windows shell or InternetExplorer or SQL Server)加载后,要创建一个默认的AppDomain,程序的入口点 (Main方法)就…
同一AppDomain内的SharpGL的FrameBuffer会相互影响? 今天做一个试验时,偶然发现了这样一个问题. 以SharpGL的示例项目SimpleDrawingSample为例. 给FormSimpleDrawingSample窗口里的label1控件添加如下的点击事件代码. private void label1_Click(object sender, EventArgs e) { (new FormSimpleDrawingSample()).Show(); } 就是再产生一…
// 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录.System.Environment.CurrentDirectory // 获取应用程序的当前工作目录,注意工作目录是可以改变的,而不限定在程序所在目…
关于寄宿和AppDomain 微软开发CLR时,将它实现成包含在一个DLL中的COM服务器. 任何Windows应用程序都能寄宿(容纳)CLR.(简单来讲,就是CLR在一个DLL中,通过引用这个DLL,可以实现包含CLR) CLR COM服务器初始化会创建一个默认AppDomain,这个AppDomain只有在进程终结时才会被销毁. 然而宿主程序还可以要求CLR创建额外的AppDomain. 因为创建进程开销很大,并且需要大量内存来虚拟化进程的地址空间. 所以人们就像可不可以在一个进程上运行多个…
一服务器上的数据库全部被置于紧急模式(EMERGENCY),在错误日志里面能看到大量下面的错误 Failed to create AppDomain "YourSQLDba.dbo[runtime].79". Exception has been thrown by the target of an invocation. Failed to create AppDomain "YourSQLDba.dbo[runtime].76". Exception has b…
什么是AppDomain? 我们都知道windows进程,它起到应用程序隔离的作用,带来的好处是,当某个进程发生错误的时候,不会影响其他的进程,系统也不会受到影响.但是,创建windows进程的代价是很大的..net推出AppDomain的作用也是隔离,如果能确保应用程序都是安全代码(managed code),那么appdomain其实就可以起到进程的作用.每个appdomain里有自己的堆,负责自己内部对象的创建和销毁,对象一般不能夸appdomain访问. 当应用程序启动,CLR加载后,会…
应用场景 动态调用DLL中的类,执行类的方法实现业务插件功能 使用Assembly 来实现 但是会出现逻辑线程数异常的问题 使用AppDomain 实现动态调用,并卸载. 发现问题某个插件中开启异步线程,会抛线程终止的异常. 百度查到把线程执行代码放到finally块中 AppDomain很出色的一个能力就是它允许卸载.卸载AppDomain会导致CLR卸载AppDomain中的所有程序集,还会释放AppDomain的Loader堆.为了卸载一个AppDomain,可以调用AppDomain的静…
转载自: 跨应用程序域(AppDomain)的单例(Singleton)实现 - CorePlex代码库 - CorePlex官方网站,Visual Studio插件,代码大全,代码仓库,代码整理,分享,为打造最有价值的在线代码库而不懈努力http://www.udnz.com/code-2882.htm 工作中基于插件模式,特别是插件可能不稳定,导致主程序进程终止时,我们往往使用应用程序域来隔离插件和主程序,但此时如果主程序中有单例(Singleton)实现,那在不同的AppDomain里访问…
使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做是一个轻量级的进程.一个应用程序域可以有多个线程,一个线程也可以穿梭于多个应用程序域. 在一个进程中可以包含多个应用程序域,一个应用程序域可以装在一个可执行程序(*.exe)或者多个程序集(*.dll).这样可以使应用程序域之间实现深度隔离,即使进程中的某个应用程序域出现错误,也不会影响其他应用程序域的正常运作…
原错误信息: 服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的“刷新”按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到.请检查此日志项以查明导致该错误发生的原因. 查看系统日志报错[Failed to execute request because the App-Domain could not be created.] 系统运行一直很正常,昨天访问网站时报错,服务器的…
partial class HttpBrowser { public static string IsolateCall(PageContentHandler pHandler) { Contract.Requires(pHandler != null); string name = Guid.NewGuid().ToString("N"); var box = SandboxManager.Create(name, true); try { string entryType = &q…
网上一看Appdomain出错,绝大部分都是说控件加载错误.经测试在.net 4.0环境下 rdlc报表很容易发生卸载 Appdomain 时出错. (异常来自 HRESULT:0x80131015)错误,网上查资料可以看出这个错误的差不多的意思是你进程退出时未能够卸载其中一个线程的程序集,而这个程序集恰好是rdlc报表控件,然后抓住关键点. 解决它的关键 调用ReportViewer控件的LocalReport.Dispose()方法即可 或者LocalReport.ReleaseSandbo…
在C#中尝试获取AD帐号信息时,会随机出现Attempted to access an unloaded appdomain的问题,解决方法如下: 将 principalContext = new PrincipalContext(ContextType.Domain) 替换为:principalContext = new PrincipalContext(ContextType.Domain,"MYDOMAIN")MYDOMAIN为对应的域名即可.…
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统,这个WinService系统管理的形形色色各种各样的服务,这些服务也是各个"插件式"的类库,例如: public interface IJob { void Run(DateTime time); } public class CollectUserInfo : IJob { public…
今天就说说.Net中通过反射取得某个类型时,我们怎么知道这个类型在硬盘上的哪个角落?比如说,假如我们需要要求服务端动态载入某个数据源,那服务端怎么知道数据源在哪?网上大部分的教程都写着,可以使用Assembly.Load方法来先加载程序集,然后再用Assembly.GetType或者Assembly.GetTypes方法处理.这个方法很好很实用,基本上也就够了.不过如果这么无聊,也就算不上冷知识,更没有必要写这些了.如果有办法自动搜索程序集里面有没有暴露对应的类型,我们凭啥还要自行载入程序集?难…
关于程序路径 LucenePath:@(System.Configuration.ConfigurationManager.AppSettings["LucenePath"])<br /> Path.Combine(相对目录)@(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "lucene_index"))<br /> Path.Combine(绝对目录)@(Path.Combine(…
前面已经讨论了宿主以及宿主加载CLR的方式.同时还讨论了宿主如何告诉CLR创建和卸载AppDomain.为了使这些讨论更加具体,下面将描述一些常见的宿主和AppDomain使用情形.特别地,我要解释不同应用程序类型如何宿主CLR,以及他们如何管理AppDomain. 1      可执行应用程序 控制台UI应用程序.NT Service应用程序.Windows窗体应用程序和WPF应用程序都是自宿主应用程序的例子,他们都有托管的EXE文件.Windows用一个托管EXE文件初始化一个进程时,会加载…
每个AppDomain都可关联一组回调方法:CLR开始查找AppDomain中的catch块时,这些回调方法就会得到调用.这些方法可执行日志记录操作.除此之外,宿主可利用这个机制监视AppDomain中抛出的异常.回调方法不处理异常,也不能以任何方式吃掉它:他们只是接受关于异常已经发生的一个通知.为了登记一个回调方法,只需为AppDomain的实例事件FirstChanceException添加一个委托. 下面描述了CLR如何处理一个异常:异常首次抛出时,CLR会调用以向抛出异常的那个AppDo…
宿主应用程序可监视AppDomain消耗的资源.有的宿主根据这种信息判断一个AppDomain的内存或CPU消耗是否超过了应有的水准,并强制卸载一个AppDomain. 还可以利用监视来比较不同算法的资源消耗情况,判断哪种算法用的资源较少.由于AppDomain监视本身也会产生开销,所以宿主必须将AppDomain的静态属性MonitoringEnabled设为true,从而显示打开监视.监视一旦打开就不能关闭:如果试图将MonitoringEnabled设为false,会抛出一个Argumen…
AppDomain很出色的一个能力就是它允许卸载.卸载AppDomain会导致CLR卸载AppDomain中的所有程序集.还会释放AppDomain的Loader堆.为了卸载一个AppDomain,可调用AppDomain的静态方法Unload.这将导致CLR执行一系列操作来得体的卸载指定AppDomain. CLR挂起进程中执行过托管代码的所有线程. CLR检查所有线程栈,查看那些线程正在执行要卸载的那个AppDomain中的代码,或者那些线程会在某个时候返回至要卸载的那个AppDomain.…
CLR COM服务器初始化时,会创建一个AppDomain.AppDomain是一组程序集的逻辑容器.CLR初始化时创建的第一个AppDomain称为默认的AppDomain,这个默认的AppDomain只有在Windonws进程终止时才能被撤销. 除了默认的AppDomain,正在使用非托管Com接口方法或托管类型方法的一个宿主还可指示CLR创建额外的AppDomain,AppDomain唯一的作用就是进程隔离.下面总结了AppDomain的具体功能. 1.1.   一个AppDomain中的…
应用程序域 一.什么是应用程序域? 应用程序域 (application domain) (AppDomain) 一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置).应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以预知.在一个单独的进程中可以存在多个应用程序域.   详情参考百度百科:http://baike.baidu.com/view/159546.htm?fr=aladd…
装上IIS和.net2.0框架后,打开ASP.NET站点,出现Server Application Error,出先此问题,一般先看系统的“事件管理器”,于是查看服务器的“事件管理器”中的“应用程序”日志,发现错误信息是: Failed to execute request because the App-Domain could not be created. Error: 0x80131902 基本上,这个情況最可能发生在第一次执行 .Net work 2.0的时候 ,原由总结一下,大致有两…
1. 概念解析 CLR Hosting(CLR 宿主):初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只不过由于PE文件中引入了CLR Header,OS进程加载了mscoree.dll,从而启动了CLR,CLR本身不是一个可执行程序,它需要一个进程来装载并启动它,从而接管进程并创建自身的程序运行上下文,这个过程可称之为CLR Hosting.从本质上来讲,CLR是一个COM服务器,它自身封装了一系列称之为CLR…
本博客中以“C#.Net 如何动态加载与卸载程序集(.dll或者.exe)”开头的都是引用莫问奴归处 微软装配车的大门似乎只为货物装载敞开大门,却将卸载工人拒之门外.车门的钥匙只有一把,若要获得还需要你费一些心思.我在学习Remoting的时候,就遇到一个扰人的问题,就是Remoting为远程对象仅提供Register的方法,如果你要注销时,只有另辟蹊径.细心的开发员,会发现Visual Studio.Net中的反射机制,同样面临这个问题.你可以找遍MSDN的所有文档,在Assembly类中,你…
最近在对AppDomain编程时遇到了一个问题,卸载AppDomain后,在内存中还保留它加载的DLL的数据,所以即使卸载掉AppDomain,还是无法更新它加载的DLL.看来只有关闭整个进程来更新DLL了. -------------------------------------------------------------------------------------------------------------- 我们知道,进程是操作系统用于隔离众多正在运行的应用程序的机制.在.N…
实现目的:动态加载dll,执行完毕之后可以随时卸载掉,并可以替换这些dll,以在运行中更新dll中的类. 其实就是通过应用程序域AppDomain加载和卸载程序集. 在这方面微软有篇文章http://www.microsoft.com/china/msdn/archives/library/dncscol/html/csharp05162002.asp介绍的比较详细:Wayfarer's Prattle同志也有一篇http://www.cnblogs.com/wayfarer/archive/2…
跨AppDomain通信有两种方式 1.Marshal By reference : 传递引用 2.Marshal By Value : 把需要传递的对象 通过序列化反序列化的方式传递过去(值拷贝) 只有标记为 可序列化 Serializable 的类才能通过 Marshal By Value的方式通信 以下代码描述了几种跨域通信的情况 1.AppDomain是CLR的内部行为,windows完全不清楚有AppDomain的存在 2.在新的域中加载Assembly和Type最好用完整限定名(如果…