进程是存在独立的内存和资源的,但是AppDomain仅仅是逻辑上的一种抽象。一个process可以存在多个AppDomain。各个AppDomain之间的数据时相互独立的。一个线程可以穿梭多个AppDomain。

一、属性

ActivationContext           获取当前应用程序域的激活上下文。
ApplicationIdentity           获得应用程序域中的应用程序标识。
ApplicationTrust            获取说明授予应用程序的权限以及应用程序是否拥有允许其运行的信任级别的信息。
BaseDirectory              获取基目录,它由程序集冲突解决程序用来探测程序集。
CurrentDomain              获取当前 Thread 的当前应用程序域。
DomainManager             获得初始化应用程序域时主机提供的域管理器。
DynamicDirectory             获取目录,它由程序集冲突解决程序用来探测动态创建的程序集。
Evidence                获取与该应用程序域关联的 Evidence。
FriendlyName              获取此应用程序域的友好名称。
Id                     获得一个整数,该整数唯一标识进程中的应用程序域。
IsFullyTrusted               获取一个值,该值指示加载到当前应用程序域的程序集是否是以完全信任方式执行的。
IsHomogenous              获取一个值,该值指示当前应用程序域是否拥有一个为加载到该应用程序域的所有程序集授予的权限集。
MonitoringIsEnabled           获取或设置一个值,该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。 一旦对进程启用了监视,则无法将其禁用。
MonitoringSurvivedMemorySize       获取上次完全阻止回收后保留下来的、已知由当前应用程序域引用的字节数。
MonitoringSurvivedProcessMemorySize   获取进程中所有应用程序域的上次完全阻止回收后保留下来的总字节数。
MonitoringTotalAllocatedMemorySize    获取自从创建应用程序域后由应用程序域进行的所有内存分配的总大小(以字节为单位,不扣除已回收的内存)。
MonitoringTotalProcessorTime       获取自从进程启动后所有线程在当前应用程序域中执行时所使用的总处理器时间。
PermissionSet        获取沙盒应用程序域的权限集。
RelativeSearchPath     获取基目录下的路径,在此程序集冲突解决程序应探测专用程序集。
SetupInformation     获取此实例的应用程序域配置信息。
ShadowCopyFiles     获取应用程序域是否配置为影像副本文件的指示。

    public class Program
{
static void Main(string[] args)
{
AppDomain appdomain = AppDomain.CurrentDomain; //获取当前 Thread 的当前应用程序域。
Console.WriteLine(appdomain.Id); //输出 1 获得一个整数,唯一标识进程中的应用程序域。
Console.WriteLine(appdomain.ActivationContext); //输出 空白 获取当前应用程序域的激活上下文。
Console.WriteLine(appdomain.ApplicationIdentity); //输出 空白 获得应用程序域中的应用程序标识。 ApplicationTrust AT = appdomain.ApplicationTrust; //获取说明授予应用程序的权限以及应用程序是否拥有允许其运行的信任级别的信息。
Console.WriteLine(appdomain.ApplicationTrust); //输出 System.Security.Policy.ApplicationTrust Console.WriteLine(appdomain.BaseDirectory); //输出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ 获取基目录,它由程序集冲突解决程序用来探测程序集。 AppDomainManager Adm = appdomain.DomainManager; //获得初始化应用程序域时主机提供的域管理器。
Console.WriteLine(Adm.EntryAssembly.Location); //输出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
Console.WriteLine(appdomain.DomainManager); //输出 Microsoft.VisualStudio.HostingProcess.VSHostAppDomainManager Console.WriteLine(appdomain.DynamicDirectory); //输出 空白 获取目录,它由程序集冲突解决程序用来探测动态创建的程序集。 Evidence ed = appdomain.Evidence; //另外一个东西了 获取与该应用程序域关联的 Evidence。
Console.WriteLine(appdomain.Evidence.ToString()); //输出 System.Security.Policy.Evidence Console.WriteLine(appdomain.FriendlyName); //输出 ConsoleApplication1.vshost.exe 获取此应用程序域的友好名称。 Console.WriteLine(appdomain.IsFullyTrusted); //输出 True 获取一个值,该值指示加载到当前应用程序域的程序集是否是以完全信任方式执行的。 Console.WriteLine(appdomain.IsHomogenous); //输出 True 获取一个值,该值指示当前应用程序域是否拥有一个为加载到该应用程序域的所有程序集授予的权限集。 Console.WriteLine(AppDomain.MonitoringIsEnabled); //输出 False 获取或设置一个值,该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。 一旦对进程启用了监视,则无法将其禁用。 AppDomain.MonitoringIsEnabled = true;
//要上面那个属性启用之后,这个属性才能用
Console.WriteLine(appdomain.MonitoringSurvivedMemorySize); //输出 0 获取上次完全阻止回收后保留下来的、已知由当前应用程序域引用的字节数。
Console.WriteLine(appdomain.MonitoringTotalAllocatedMemorySize); //输出 0 获取自从创建应用程序域后由应用程序域进行的所有内存分配的总大小(以字节为单位,不扣除已回收的内存)。
Console.WriteLine(appdomain.MonitoringTotalProcessorTime); //输出 00:00:00 获取自从进程启动后所有线程在当前应用程序域中执行时所使用的总处理器时间。 System.Security.PermissionSet ps = appdomain.PermissionSet; //获取沙盒应用程序域的权限集。 Console.WriteLine(appdomain.PermissionSet.ToString()); //输出 <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true"/> Console.WriteLine(appdomain.RelativeSearchPath); //输出 空白 Console.WriteLine(appdomain.SetupInformation); //输出 AppDomainSetup 获取此实例的应用程序域配置信息。 Console.WriteLine(appdomain.ShadowCopyFiles); //输出 False File.WriteAllText(@"D:\123.txt", appdomain.PermissionSet.ToString()); //SetupInformation 获取此实例的应用程序域配置信息。
//ShadowCopyFiles 获取应用程序域是否配置为影像副本文件的指示。 Console.ReadKey();
}

二、方法

名称 说明
ApplyPolicy             返回应用策略后的程序集显示名称。
CreateComInstanceFrom(String, String) 创建指定 COM 类型的新实例。 形参指定文件的名称,该文件包含含有类型和类型名称的程序集。
CreateDomain(String)        使用指定的名称新建应用程序域。
CreateInstance(String, String)   创建在指定程序集中定义的指定类型的新实例。
CreateInstanceAndUnwrap(String, String) 创建指定类型的新实例。 形参指定定义类型的程序集以及类型的名称。
CreateInstanceFrom(String, String)   创建在指定程序集文件中定义的指定类型的新实例。
CreateObjRef               创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)   以指定名称和访问模式定义动态程序集。
DoCallBack           在另一个应用程序域中执行代码,该应用程序域由指定的委托标识。
ExecuteAssembly(String)     执行指定文件中包含的程序集。
ExecuteAssemblyByName(String)     在给定其显示名称的情况下执行程序集。
GetAssemblies      获取已加载到此应用程序域的执行上下文中的程序集。
GetData         为指定名称获取存储在当前应用程序域中的值。
GetLifetimeService      检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
InitializeLifetimeService   通过防止创建租约来给予 AppDomain 无限生存期。 (重写 MarshalByRefObject.InitializeLifetimeService()。)
IsCompatibilitySwitchSet  获取可以为 null 的布尔值,该值指示是否设置了任何兼容性开关,如果已设置,则指定是否设置了指定的兼容性开关。
IsDefaultAppDomain      返回一个值,指示应用程序域是否是进程的默认应用程序域。
IsFinalizingForUnload     指示此应用程序域是否正在卸载以及公共语言运行时是否正在终止该域包含的对象。
Load(AssemblyName)    在给定 AssemblyName 的情况下加载 Assembly。
ReflectionOnlyGetAssemblies   返回已加载到应用程序域的只反射上下文中的程序集。
SetData(String, Object)   为指定的应用程序域属性分配指定值。
SetData(String, Object, IPermission)   将指定值分配给指定应用程序域属性,检索该属性时要求调用方具有指定权限。
SetPrincipalPolicy      指定在此应用程序域中执行时如果线程尝试绑定到用户,用户和标识对象应如何附加到该线程。
SetThreadPrincipal     设置在以下情况下要附加到线程的默认主体对象,即当线程在此应用程序域中执行时,如果线程尝试绑定到主体这种情况。
Unload           卸载指定的应用程序域。

 class Program
{
static void Main(string[] args)
{
AppDomain app = AppDomain.CreateDomain("测试程序域"); //使用指定的名称创建应用程序域
ObjectHandle objHan = app.CreateInstance("MySpace", "MySpace.Person"); //创建指定程序集中指定的对象
var obj = objHan.Unwrap();
Console.WriteLine(obj.ToString()); //输出 MySpace.Person object obj2 = app.CreateInstanceAndUnwrap("MySpace","MySpace.Person"); //创建指定程序中指定的对象,顺带执行了Unwrap方法
Console.WriteLine(obj2.ToString()); //输出 MySpace.Person ObjectHandle objHan2 = app.CreateInstanceFrom(@"D:\MySpace.dll", "MySpace.Person"); //从指定的程序集中创建类的对象
object obj3 = objHan2.Unwrap();
Console.WriteLine(obj3.ToString()); //输出 MySpace.Person //app.CreateObjRef(); app.ExecuteAssembly(@"D:\ConsoleApplication1.exe"); //执行指定文件中包含的程序集 输出0123456789
//D:\ConsoleApplication1.exe的代码如下
//static void Main(string[] args)
//{
// for (int i = 0; i < 10; i++)
// {
// Console.WriteLine(i);
// } // Console.ReadKey();
//} //下面改动一下D:\ConsoleApplication1.exe,改为在D盘下创建一个文件,并写入一段文字
app.ExecuteAssembly(@"D:\ConsoleApplication1.exe"); //运行之后在D盘下创建了一个文件,并写入文字
//static void Main(string[] args)
//{
// File.WriteAllText(@"D:\AppDomainTest.txt","测试测试");
// Console.ReadKey();
//}
//注意,此次由于有Console.ReadKey(); 因此执行到这里要按两次键盘,让app程序域执行完毕才会又回到主程序域
Assembly[] assArr = app.GetAssemblies(); //获取加载到app应用程序域中的所有程序集 foreach (var ass in assArr)
{
Console.WriteLine(ass.FullName); //诸如此类 ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
} //给定Assembly的情况下装载程序集
app.Load("MySpace");
Console.WriteLine(app.IsDefaultAppDomain()); //输出 False 是否是进程默认的应用程序域 app.SetData("data1", "我靠"); //为指定的应用程序域属性分配指定值。
object o = app.GetData("data1");
Console.WriteLine(o.ToString()); //输出 我靠 //ApplyPolicy 返回应用策略后的程序集显示名称。
//CreateComInstanceFrom(String, String) 创建指定 COM 类型的新实例。 形参指定文件的名称,该文件包含含有类型和类型名称的程序集。
//CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
//DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) 以指定名称和访问模式定义动态程序集。
//DoCallBack 在另一个应用程序域中执行代码,该应用程序域由指定的委托标识。
//ExecuteAssemblyByName(String) 在给定其显示名称的情况下执行程序集。
//GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
//InitializeLifetimeService 通过防止创建租约来给予 AppDomain 无限生存期。 (重写 MarshalByRefObject.InitializeLifetimeService()。)
//IsCompatibilitySwitchSet 获取可以为 null 的布尔值,该值指示是否设置了任何兼容性开关,如果已设置,则指定是否设置了指定的兼容性开关。
//IsFinalizingForUnload 指示此应用程序域是否正在卸载以及公共语言运行时是否正在终止该域包含的对象。
//ReflectionOnlyGetAssemblies 返回已加载到应用程序域的只反射上下文中的程序集。
//SetPrincipalPolicy 指定在此应用程序域中执行时如果线程尝试绑定到用户,用户和标识对象应如何附加到该线程。
//SetThreadPrincipal 设置在以下情况下要附加到线程的默认主体对象,即当线程在此应用程序域中执行时,如果线程尝试绑定到主体这种情况。
//Unload 卸载指定的应用程序域。 Console.ReadKey();
}
}

C# System.AppDomain类的更多相关文章

  1. C#基础知识之System.AppDomain类

    进程是存在独立的内存和资源的,但是AppDomain仅仅是逻辑上的一种抽象.一个process可以存在多个AppDomain.各个AppDomain之间的数据时相互独立的.一个线程可以穿梭多个AppD ...

  2. System.AppDomain类详解(二)

    进程是存在独立的内存和资源的,但是AppDomain仅仅是逻辑上的一种抽象.一个process可以存在多个AppDomain.各个AppDomain之间的数据时相互独立的.一个线程可以穿梭多个AppD ...

  3. System.AppDomain类详解(一)

    AppDomain是CLR(Common Language Runtime:公共语言运行库),它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制. 每 ...

  4. C# AppDomain 类

    /*** AppDomain 表示应用程序域,它是一个应用程序在其中执行的独立环境.无法继承此类. 应用程序域(由 AppDomain 对象表示)为执行托管代码提供隔离.卸载和安全边界. 使用应用程序 ...

  5. 应用程序域 System.AppDomain,动态加载程序集

    一.概述 使用.NET建立的可执行程序 *.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.在一个进程中可以包含多个应用程序域,一个应用程序域可以装载一个可执行程序( ...

  6. 认识AppDomain类

    原文:认识AppDomain类 表示应用程序域,它是一个应用程序在其中执行的独立环境. 创建新的 AppDomain,在该新建 AppDomain 中实例化类型,以及与该类型的对象通信. usingn ...

  7. 反射,System.Type类

    http://m.blog.csdn.net/blog/woddle/40623333 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到 ...

  8. 反射 介绍System.Type类

    本节先介绍system.Type类,通过这个类可以访问关于任何数据类型的信息. 1. system.Type类以前把Type看作一个类,但它实际上是一个抽象的基类.只要实例化了一个Type对象,实际上 ...

  9. C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等

    System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类. 一.属性 AbsolutePath 获取 URI ...

随机推荐

  1. PHP与C++的不同

    由于工作需要,需要学习一下PHP,由于3年的C++背景,在刚开始学习PHP的过程中,有些不习惯,经过一段时间的学习,总结了一些PHP与C++的不同. 1.应用场景 在谈两种语言不同的时候,首先需要了解 ...

  2. Fedora 22(15以上版本)开机自启动脚本

    前段时间做了一个网站btdog磁力与btdog电视直播.DHT爬虫需要消耗比较多的资源,原来的服务器不够用了,于是自己使用电脑搭了一台服务器,使用Fedora22系统.在Fedora22中自动写了些开 ...

  3. 类linux 系统iptables 系统初始化配置

    #!/bin/bash iptables -F iptables -X /etc/rc.d/init.d/iptables save service iptables restart iptables ...

  4. nginx 采用https 协议通信配置

    在网络通信中,使用抓包软件可以对网络请求进行分析,并进行重放攻击,重放攻击的解决方案一般是使用一个变化的参数,例如RSA加密的时间戳,但考虑到网络传输时延,时间戳需要有一定的误差容限,这样仍然不能从根 ...

  5. Oracle与DB2的区别

    系统结构概述 首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读 ...

  6. 基础总结篇之二:Activity的四种launchMode

    合抱之木,生於毫末:九層之台,起於累土:千里之行,始於足下.<老子> 今天在社区看到有朋友问“如何在半年内成为顶级架构师”,有网友道“关灯睡觉,不用半年的...”,的确,做梦还来的快一些. ...

  7. java-程序执行原理

    java应用可以打包成jar 格式,jar格式其实只是一种很普通的压缩格式,与zip格式一样,只不过是它会在压缩文件的目录结构中增加一个META-INF/ MANIFEST.MF 的元文件. 我们知道 ...

  8. [Python学习笔记][第四章Python字符串]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...

  9. 基础命名空间:序列化_自定义序列化 System.Runtime.Serialization

    (  (From Msdn) 自定义序列化是控制类型的序列化和反序列化的过程,通过控制序列化,可以确保序列化兼容性.换而言之,在不中断类型核心功能的情况下,可在类型的不同版本之间序列化和反序列化. 重 ...

  10. C#图像处理(1):在图片上加文字和改变文字的方向

    C#在图片上加文字,代码如下: /// <summary> /// 图片上方加文字,文字将会被180度反转 /// </summary> /// <param name= ...