首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏JusterZhu

    AppDomain

    主要功能包括: 隔离:不同的AppDomain之间是隔离的,一个AppDomain中的异常不会影响其他AppDomain。 安全性:可以为每个AppDomain设置不同的安全策略。 以下是关于 AppDomain 加载和卸载的详细讲解: 2.1.1AppDomain的加载 加载AppDomain的过程包括以下步骤: 创建AppDomain:使用AppDomain.CreateDomain 卸载 AppDomain: 使用 AppDomain.Unload 方法卸载新的 AppDomain,释放资源。 卸载 AppDomain: 使用 AppDomain.Unload 方法卸载新的 AppDomain,释放资源。 卸载 AppDomain: 使用 AppDomain.Unload 方法卸载新的 AppDomain,释放资源。

    83200编辑于 2025-01-23
  • 来自专栏dotNET知音

    AppDomain迁移到AssemblyLoadContext

    AssemblyLoadContext 基本上AssemblyLoadContext是AppDomain的继承者,它提供相同而且更多的功能-除了安全边界(隔离)。 官网文档中提到Appdomain已经过时了,为了兼容旧的版本,提供了部分功能。建议在.NET Core3.0及更高的版本使用AssemblyLoadContext。 从AppDomain迁移到AssemblyLoadContext 也许你仍在应用程序中使用AppDomain。 现在,以下代码显示如何用AssemblyLoadContext的相应方法去替换掉AppDomain方法: 获取所有程序集 var assembliesInAppDomain = AppDomain.CurrentDomain.GetAssemblies (); var assembliesInAssemblyLoadContext = AssemblyLoadContext.Default.Assemblies; 加载一个程序集 AppDomain.CurrentDomain.Load

    1.9K20发布于 2020-02-12
  • 来自专栏网站建设、网站制作专栏

    .NET基础:应用程序域AppDomain

    在 CLR 里、AppDomain就是用来实现代码隔离的,每一个AppDomain可以单独创建、运行、卸载。 AppDomain和其他概念之间的关系 1、AppDomain vs 进程Process AppDomain被创建在Process中,一个Process内可以有多个AppDomain。 每个AppDomain引用到某个类型的时候需要把相应的assembly在各自的AppDomain中初始化。因此,每个AppDomain会单独保持一个类的静态变量。 4、AppDomain vs 对象object 任何对象只能属于一个AppDomainAppDomain用来隔离对象。 三、在新AppDomain中创建对象 上文已经说了创建AppDomain了,但是创建的新AppDomain却是不包含任何对象的,只是一个空壳子。那么如何在新的AppDomain中创建对象呢?

    1.6K60发布于 2019-11-05
  • 来自专栏魂祭心

    原 利用Appdomain动态加载程序集,

    结构图 生成目录和新的appdomain基目录相同,随时生成,随时加载。         {             return GlobalVariables.functionString;         }     } 类需要继承MarshalByRefObject用于Appdomain ;                 setup.PrivateBinPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "private  = AppDomain.CreateDomain("ModelLoadDomain", null, setup);                 string name = Assembly.LoadFrom setup.ApplicationBase = appPath;// AppDomain.CurrentDomain.BaseDirectory; 正常的程序是使用注释后的路径即可在debug下创建新域的目录

    1.3K80发布于 2018-05-17
  • 来自专栏葡萄城控件技术团队

    如何遍历当前进程中的AppDomain

    .Net Framework居然没有提供托管的接口来获取当前进程中的其它AppDomain!所以,我们只有借助承载接口(Hosting Interfaces)来完成这事了。 所以,我们只需要新建一个CorRuntimeHostClass然后调用EnumDomains和NextDomain方法即可: public static IList<AppDomain> GetAppDomains () { IList<AppDomain> list = new List<AppDomain>(); IntPtr enumHandle = IntPtr.Zero; CorRuntimeHostClass host.NextDomain(enumHandle, out domain); if (domain == null) break; AppDomain appDomain = (AppDomain)domain; list.Add(appDomain); } return list; }

    2.2K80发布于 2018-01-10
  • 来自专栏walterlv - 吕毅的博客

    WPF 跨应用程序域的 UI(Cross AppDomain UI)

    WPF 跨应用程序域的 UI(Cross AppDomain UI) 发布于 2017-11-12 16:36 var domain = AppDomain.CreateDomain("X"); var instance = (DomainX)domain.CreateInstanceAndUnwrap(typeof

    1.5K20发布于 2018-09-18
  • 来自专栏王清培的专栏

    .NET简谈组件程序设计之(AppDomain应用程序域)

    [王清培版权所有,转载请给出署名] .NET应用程序域(AppDomain)是我们所有.NET应用程序的逻辑宿主容器。初次接触会感觉到AppDomain离我们日常开发比较远,不常用到。 其实.NET的应用程序域诞生的初衷有点这个意思,用AppDomain进行隔离错误异常。 那么.NET为我们提供了AppDomain的概念,它是程序在进程中的逻辑宿主。既然是逻辑宿主,那么他们还是共享同一地址空间。在系统的托管堆中还是不分AppDomain的概念的。 //创建新的应用程序域 Console.WriteLine("default appdomain name:\n" + AppDomain.CurrentDomain.FriendlyName ); AppDomain newdomain = AppDomain.CreateDomain("newadddomain"); object refobject

    56130编辑于 2022-03-14
  • 来自专栏FreeBuf

    clrinject:向CLR Runtimes和AppDomain中注入代码的工具

    前言 clrinject是一款可将C#,EXE或DLL程序集,注入另一个进程CLR Runtimes和AppDomain的工具。 其他选项 -e:枚举所有已加载的CLR Runtimes时和创建的AppDomain。 -d <#>:仅注入<#> -th AppDomain。 如果未指定数字或指定为零,则会将程序集注入到所有AppDomain。 -i <namespace>.<className>:从命名空间<namespace>创建类<className>的实例。 使用示例 从victim.exe枚举Runtimes和AppDomains: clrinject-cli.exe -p victim.exe -e 将invader.exe从id为1234的进程注入第二个AppDomain : clrinject-cli.exe -p 1234 -a "C:\Path\To\invader.exe" -d 2 在victim.exe中的每个AppDomain中创建Invader实例: clrinject-cli.exe

    1.2K30发布于 2018-12-11
  • 来自专栏跟着阿笨一起玩NET

    C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法

    System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名 System.Diagnostics.Process.GetCurrentProcess System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase // 获取启动了应用程序的可执行文件的路径。

    2.3K20发布于 2019-09-10
  • 来自专栏JusterZhu

    C# Assembly

    AppDomain 应用程序隔离:AppDomain是.NET中用于隔离应用程序的执行环境,提供了一个轻量级的进程内隔离机制。 用途:Assembly用于模块化和重用,AppDomain用于隔离和管理执行。 隔离性:AppDomain提供代码执行的隔离,而Assembly在加载后共享到AppDomain中。 4. Assembly.Load和AppDomain.Load有什么区别? System.AppDomain 提供了 Load方法。 我们知道,AppDomain 关联了一些告诉 CLR如何查找程序集的设置。为了加载这个程序集,CLR 将使用与指定AppDomain 关联的设置,而非与发出调用之AppDomain 关联的设置。 区别 加载位置:Assembly.Load在当前AppDomain加载,而AppDomain.Load可以指定AppDomain

    1.2K10编辑于 2025-01-23
  • 来自专栏林德熙的博客

    C# 动态加载卸载 DLL

    首先,我们可以通过var appDomain = AppDomain.CreateDomain(appDomainName);创建 AppDomain 。 他是可以卸载,卸载 AppDomain 使用 AppDomain.Unload ,就可以把加载在 AppDomain 的 DLL 卸载。 于是我们需要把 DLL 加载在 AppDomain ,这样之后可以卸载 AppDomain 动态删掉 加载的DLL。 AppDomain.Unload(appDomain);在 finally 上面的 appDomainName 是我自己给他的。 AppDomain 加载的 DLL 会在主程序集,如果使用了,就会在我们新建的 AppDomain

    2.6K10发布于 2018-09-18
  • 来自专栏林德熙的博客

    C# 动态加载卸载 DLL

    首先,我们可以通过var appDomain = AppDomain.CreateDomain(appDomainName);创建 AppDomain 。 他是可以卸载,卸载 AppDomain 使用 AppDomain.Unload ,就可以把加载在 AppDomain 的 DLL 卸载。 于是我们需要把 DLL 加载在 AppDomain ,这样之后可以卸载 AppDomain 动态删掉 加载的DLL。 AppDomain.Unload(appDomain);在 finally 上面的 appDomainName 是我自己给他的。 AppDomain 加载的 DLL 会在主程序集,如果使用了,就会在我们新建的 AppDomain

    2.1K20编辑于 2022-08-04
  • 来自专栏大内老A

    What is "Type" in managed heap?

    appDomain1 = AppDomain.CreateDomain("Artech.AppDomain1"); AppDomain appDomain2 = AppDomain.CreateDomain AppDomain appDomain1 = AppDomain.CreateDomain("Artech.AppDomain1");AppDomain appDomain2 = AppDomain.CreateDomain :Artech.AppDomain1和Artech.AppDomain2。 SharedDomain中加载的是一些AppDomain中性,能被各不同的AppDomain共享的信息。 中,所以在AppDomain1和AppDomain2的CustomType Type是不同的对象。

    95880发布于 2018-02-07
  • 来自专栏大内老A

    深入理解string和如何高效地使用string

    二、      String可以跨AppDomain共享的(cross-appDomain) 我们知道,在一个托管的环境下,Appdomain是托管程序运行的一个基本单元。 Appdomain传递到另一个Appdomain。  appDomain1 = AppDomain.CreateDomain("Artech.AppDomain1");             AppDomain appDomain2 = AppDomain.CreateDomain 在Main方法中,首先创建了两个AppDomain,名称分别为Artech.AppDomain1和Artech.AppDomain2。  = AppDomain.CreateDomain("Artech.AppDomain1");             AppDomain appDomain2 = AppDomain.CreateDomain

    1.1K110发布于 2018-01-16
  • 来自专栏分布式系统和大数据处理

    .Net Remoting(应用程序域) - Part.1

    通常的编程情况下下,我们几乎从不需要对AppDomain进行操作,这里我们仅看几个本文会用到的、有助于理解和调试Remoting的常见操作: 1.获取当前运行的代码所在的应用程序域,可以使用AppDomain 回答这个问题之前,我们再来看下面另一种情况: 在新建应用程序域中创建对象 我们看看如何 创建一个新的AppDomain,然后在这个新的AppDomain中创建DemoClass对象。 你可能会想,这还不简单,把上面的例子稍微改改不就OK了: // 在新AppDomain中创建一个对象 static void Test2() { AppDomain currentDomain 而实际上,只要是跨越AppDomain的访问,都属于Remoting。不管这两个AppDomain位于同一进程中,不同进程中,还是不同机器上。 但是如果从AppDomain的角度来看,服务端的AppDomain仅仅是提供了一个实际提供服务的远程对象的运行环境。

    1.2K20发布于 2018-09-29
  • 来自专栏U3D技术分享

    ILRuntime热更新

    ref、out:传送门 GC(generational garbage collector):基于代的垃圾回收器 appdomain:CLR COM服务器初始化时会创建一个AppDomainAppDomain是一组程序集的逻 辑容器。CLR初始化时创建的第一个AppDomain称为“默认AppDomain”,这个默认的AppDomain 只有在Windows进程终止时才会被销毁。 除了默认 AppDomain,正在使用非托管COM接口方法 或托管类型方法的宿主还可要求CLR创建额外的 AppDomainAppDomain是为了提供隔离而设计 的。 所以如此看来注册行为就是把键值对存储到redirectMap的过程 appdomain.RegisterCLRMethodRedirection(i, CreateInstance); 参考博客:传送门 appdomain.LoadAssembly:将需要热更的dll加载到解释器中。第一个填入dll以及pdb,这里的pdb应该是dll对应的一些标志符号。

    3.3K30编辑于 2022-09-21
  • 来自专栏大内老A

    如何证明Application Domain的隔离性

        {         public AppDomain GetAppDomain()         {             return AppDomain.CurrentDomain; "Yes" : "No");             AppDomain appDomain_MarshalByValueType = marshalByValueObject.GetAppDomain \"{0}\"",                object.ReferenceEquals(AppDomain.CurrentDomain, appDomain_MarshalByRefType)  AppDomain appDomain = AppDomain.CreateDomain("newAppDomain"); 3. 我们继续来看看我们的代码: AppDomain appDomain_MarshalByValueType = marshalByValueObject.GetAppDomain(); AppDomain

    1.2K80发布于 2018-01-16
  • 来自专栏C#

    解析.NET对象的跨应用程序域访问(上篇)

    1.AppDomain概述:       AppDomain类似与系统的进程,进程是有操作系统进行创建,AppDomain是由CLR进行创建。 如上图所示,一个对象正好存放在一个AppDomain种,值也一样。一个AppDomain中的对象引用必须是引用同一AppDomain中的对象,AppDomain的行为就好像拥有自己私有的地址空间。 如果两个AppDomain需要使用一个类型,必须为每个AppDomain分别初始化和分配一次类型。必须为各个用到类型的AppDomain分别加载和初始化一次类型的方法和程序集。 2.AppDomain核心对象解析:      上面介绍了一些AppDomain的基本概念,接下来我们来简单了解一下AppDomain的相关操作和核心对象。 在.NET种可以通过System.AppDomain类型访问AppDomain。在这里我们具体了解一下System.AppDomain类型的方法和属性。

    1.5K50发布于 2018-01-04
  • 来自专栏偏前端工程师的驿站

    Asp.net管道模型(管线模型)之一发不可收拾

    AppDomain不是进程,一个进程可以拥有一个或多个AppDomain,其中必须有一个默认的AppDomain。 也许这里您会有这样的疑问:AppDomain是线程吗? (通常含一个线程池,里面有多个可重用的线程);AppDomain与线程是多对多关系,但某一个时刻一个线程只能处理一个AppDomain,而AppDomain可以由多个线程同时处理(并发)。 从运行程序时的过程是这样的:系统首先分配一段内存地址空间然后把控制权交给了CLR生成默认AppDomain,然后将程序集加载到默认AppDomain中,程序正式运行(系统在托管堆中没有AppDomain AppDomain创建AppDomain并将该虚拟目录的程序集加载到AppDomain中(虚拟目录中可能不止一个程序集,而默认AppDomain会将整个虚拟目录下的所有程序集加载到AppDomain上) ,如果该虚拟目录的AppDomain已存在就直接使用该AppDomain,如果虚拟目录的程序集发生变化(包括web.config变化),就会新建一个AppDomain再将以变化的程序集加载到新的AppDomain

    3.2K90发布于 2018-01-18
  • 来自专栏蘑菇先生的技术笔记

    多线程中的锁系统(一)-基础用法

    在看个例子: //======Example 3===== Console.WriteLine(DateTime.Now); AppDomain appDomain1 = AppDomain.CreateDomain("AppDomain1"); LockTest Worker1 = (LockTest)appDomain1.CreateInstanceAndUnwrap appDomain2 = AppDomain.CreateDomain("AppDomain2"); LockTest Worker2 = (LockTest)appDomain2 程序域可以有多个,例子中我们使用AppDomain.CreateDomain方法创建的。 B:  按正常来说,每个程序域的代码都是隔离,互不影响的。 所以说字符串的生命周期是基于整个进程的,也是跨AppDomain。 Monitor的用法 简单介绍下Wait,Pulse,PulseAll的用法,已加注释。

    87250发布于 2018-05-21
领券