<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FAssembly%2FAppDomain</id>
		<title>Csharp/CSharp Tutorial/Assembly/AppDomain - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FAssembly%2FAppDomain"/>
		<link rel="alternate" type="text/html" href="http://www.nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Assembly/AppDomain&amp;action=history"/>
		<updated>2026-04-16T05:48:10Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Assembly/AppDomain&amp;diff=5938&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Assembly/AppDomain&amp;diff=5938&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Assembly/AppDomain&amp;diff=5939&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Assembly/AppDomain&amp;diff=5939&amp;oldid=prev"/>
				<updated>2010-05-26T12:17:48Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==An object in another application domain==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Runtime.Remoting;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main() &lt;br /&gt;
  {&lt;br /&gt;
    AppDomain d = AppDomain.CreateDomain(&amp;quot;NewDomain&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    ObjectHandle hobj = d.CreateInstance(&amp;quot;AnotherDomain&amp;quot;, &amp;quot;SimpleObject&amp;quot;);&lt;br /&gt;
    SimpleObject so = (SimpleObject) hobj.Unwrap();&lt;br /&gt;
    Console.WriteLine(so.Display(&amp;quot;make this uppercase&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Serializable]&lt;br /&gt;
public class SimpleObject &lt;br /&gt;
{&lt;br /&gt;
  public String Display(String inString)&lt;br /&gt;
  {&lt;br /&gt;
    return(inString.ToUpper());&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create object using AppDomain.CreateInstanceAndUnwrap==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Runtime.Remoting;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  [MTAThread]&lt;br /&gt;
  static void Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    AppDomain Domain2 = AppDomain.CreateDomain(&amp;quot;AppDomainB&amp;quot;);&lt;br /&gt;
    MainClass MyMyClass = (MainClass)Domain2.CreateInstanceAndUnwrap(&amp;quot;YourNameSpace&amp;quot;, &amp;quot;YourClassName&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creation of an application domain==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main() &lt;br /&gt;
  {&lt;br /&gt;
    AppDomain d = AppDomain.CreateDomain(&amp;quot;NewDomain&amp;quot;);&lt;br /&gt;
    Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);&lt;br /&gt;
    Console.WriteLine(d.FriendlyName);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;main.exe&lt;br /&gt;
NewDomain&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get and set data to AppDomain==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main() &lt;br /&gt;
    {&lt;br /&gt;
        AppDomain domain = AppDomain.CreateDomain(&amp;quot;Test&amp;quot;);&lt;br /&gt;
        ArrayList list = new ArrayList();&lt;br /&gt;
        list.Add(&amp;quot;d&amp;quot;);&lt;br /&gt;
        list.Add(&amp;quot;c&amp;quot;);&lt;br /&gt;
        list.Add(&amp;quot;f&amp;quot;);&lt;br /&gt;
        domain.SetData(&amp;quot;Pets&amp;quot;, list);&lt;br /&gt;
        foreach (string s in (ArrayList)domain.GetData(&amp;quot;Pets&amp;quot;))&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(&amp;quot;  - &amp;quot; + s);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;- d&lt;br /&gt;
  - c&lt;br /&gt;
  - f&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get AppDomain Current Domain Friendly Name==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main ()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Main AppDomain = {0}&amp;quot;, AppDomain.CurrentDomain.FriendlyName);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Main AppDomain = main.exe&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get current app domain name==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Text;&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);&lt;br /&gt;
            Console.WriteLine(AppDomain.CurrentDomain.GetAssemblies().Length.ToString());&lt;br /&gt;
            AppDomain ad = AppDomain.CreateDomain(&amp;quot;MyDomain&amp;quot;);&lt;br /&gt;
            ad.SetData(&amp;quot;MYVALUE&amp;quot;, &amp;quot;new Value&amp;quot;);&lt;br /&gt;
            MyNameSpace.MyClass1 remoteType = (MyNameSpace.MyClass1)ad.CreateInstanceFromAndUnwrap(&amp;quot;MyCode.dll&amp;quot;, &amp;quot;MyNameSpace.MyClass1&amp;quot;);&lt;br /&gt;
            remoteType.DoWork();&lt;br /&gt;
            AppDomain.Unload(ad);&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Handle AppDomain Event: DomainUnload and ProcessExit==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
  &lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void defaultAD_DomainUnload(object sender, EventArgs e)&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Unloaded defaultAD!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  private static void defaultAD_ProcessExit(object sender, EventArgs e)&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Unloaded defaultAD!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static int Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    AppDomain defaultAD = AppDomain.CreateDomain(&amp;quot;SecondAppDomain&amp;quot;);&lt;br /&gt;
    defaultAD.DomainUnload += new EventHandler(defaultAD_DomainUnload);&lt;br /&gt;
    defaultAD.ProcessExit +=new EventHandler(defaultAD_ProcessExit);&lt;br /&gt;
    // Now unload anotherAD.&lt;br /&gt;
    AppDomain.Unload(defaultAD);&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Unloaded defaultAD!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Make a new AppDomain in the current process==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
  &lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static int Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    AppDomain defaultAD = AppDomain.CreateDomain(&amp;quot;SecondAppDomain&amp;quot;);&lt;br /&gt;
    Assembly[] loadedAssemblies = defaultAD.GetAssemblies();      &lt;br /&gt;
    Console.WriteLine(&amp;quot;Here are the assemblies loaded in {0}\n&amp;quot;,defaultAD.FriendlyName);&lt;br /&gt;
    foreach(Assembly a in loadedAssemblies)&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;-&amp;gt; Name: {0}&amp;quot;, a.GetName().Name);&lt;br /&gt;
      Console.WriteLine(&amp;quot;-&amp;gt; Version: {0}\n&amp;quot;, a.GetName().Version);&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Here are the assemblies loaded in SecondAppDomain&lt;br /&gt;
-&amp;gt; Name: mscorlib&lt;br /&gt;
-&amp;gt; Version: 2.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Marshal By Reference Object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class MyClassByRef: MarshalByRefObject &lt;br /&gt;
{&lt;br /&gt;
    public string HomeAppDomain&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return AppDomain.CurrentDomain.FriendlyName;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        AppDomain newDomain = AppDomain.CreateDomain(&amp;quot;My New AppDomain&amp;quot;);&lt;br /&gt;
        MyClassByRef mbrObject = &lt;br /&gt;
            (MyClassByRef)newDomain.CreateInstanceFromAndUnwrap(&lt;br /&gt;
                &amp;quot;MainClass.exe&amp;quot;, &lt;br /&gt;
                &amp;quot;MyClassByRef&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        Console.WriteLine(&amp;quot;AppDomain of MBR object = {0}&amp;quot;, mbrObject.HomeAppDomain);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==marshall by value==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
[Serializable]&lt;br /&gt;
public class MyClass &lt;br /&gt;
{&lt;br /&gt;
    public string HomeAppDomain &lt;br /&gt;
    {&lt;br /&gt;
        get &lt;br /&gt;
        {&lt;br /&gt;
            return AppDomain.CurrentDomain.FriendlyName;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        AppDomain newDomain = AppDomain.CreateDomain(&amp;quot;My New AppDomain&amp;quot;);&lt;br /&gt;
        MyClass mbvObject = (MyClass)newDomain.CreateInstanceFromAndUnwrap(&lt;br /&gt;
                &amp;quot;MainClass.exe&amp;quot;, &lt;br /&gt;
                &amp;quot;MyClass&amp;quot;);&lt;br /&gt;
        Console.WriteLine(&amp;quot;AppDomain of MBV object = {0}&amp;quot;, mbvObject.HomeAppDomain);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Print All Assemblies In AppDomain==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
  &lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static int Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    AppDomain defaultAD = AppDomain.CurrentDomain;&lt;br /&gt;
    Console.WriteLine(&amp;quot;This call loaded System.Windows.Forms.dll and System.dll&amp;quot;);&lt;br /&gt;
    Assembly[] loadedAssemblies = defaultAD.GetAssemblies();      &lt;br /&gt;
    Console.WriteLine(&amp;quot;Here are the assemblies loaded in {0}\n&amp;quot;,defaultAD.FriendlyName);&lt;br /&gt;
    foreach(Assembly a in loadedAssemblies)&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;-&amp;gt; Name: {0}&amp;quot;, a.GetName().Name);&lt;br /&gt;
      Console.WriteLine(&amp;quot;-&amp;gt; Version: {0}\n&amp;quot;, a.GetName().Version);&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;This call loaded System.Windows.Forms.dll and System.dll&lt;br /&gt;
Here are the assemblies loaded in main.exe&lt;br /&gt;
-&amp;gt; Name: mscorlib&lt;br /&gt;
-&amp;gt; Version: 2.0.0.0&lt;br /&gt;
-&amp;gt; Name: main&lt;br /&gt;
-&amp;gt; Version: 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unloading an application domain==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Runtime.Remoting;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main() &lt;br /&gt;
  {&lt;br /&gt;
    AppDomain d = AppDomain.CreateDomain(&amp;quot;NewDomain&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    ObjectHandle hobj = d.CreateInstance(&amp;quot;AnotherDomain&amp;quot;, &amp;quot;SimpleObject&amp;quot;);&lt;br /&gt;
    SimpleObject so = (SimpleObject) hobj.Unwrap();&lt;br /&gt;
    Console.WriteLine(so.Display(&amp;quot;make this uppercase&amp;quot;));&lt;br /&gt;
    AppDomain.Unload(d);&lt;br /&gt;
    Console.WriteLine(so.Display(&amp;quot;make this uppercase&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Serializable]&lt;br /&gt;
public class SimpleObject &lt;br /&gt;
{&lt;br /&gt;
  public String Display(String inString)&lt;br /&gt;
  {&lt;br /&gt;
    return(inString.ToUpper());&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use AppDomain to execute Assembly==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        if (AppDomain.CurrentDomain.FriendlyName != &amp;quot;NewAppDomain&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            AppDomain domain = AppDomain.CreateDomain(&amp;quot;NewAppDomain&amp;quot;);&lt;br /&gt;
            domain.ExecuteAssembly(&amp;quot;MainClass.exe&amp;quot;, null, args);&lt;br /&gt;
        }&lt;br /&gt;
        foreach (string s in args)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + &amp;quot; : &amp;quot; + s);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>