首先建立一个共享程序集,代码如下:
namespace PublicAssembly
{
    public class PublicClass
    {
        public static int Num=0;
        public static int Add(int i) { Num += i; return Num; }
        public static int Reduce(int i) { Num -= i; return Num; }
    }
}
建立密钥对,强命后,安装共享程序集 成功后。
使用VS2010建立一个控制台应用程序ConsoleApplication1,添加应用共享程序集。
再使用VS2010新建一个控制台应用程序ConsoleApplication2,添加共享程序集,在该控制台应用程序中,新建一个类:
using PublicAssembly;
namespace ConsoleApplication2
{    public class Person:MarshalByRefObject
    {
        public  void Show()
        {
            Console.WriteLine(PublicClass.Num);
        }
    };
}
然后在控制台程序ConsoleApplication1,编写如下代码:
using PublicAssembly;
using ConsoleApplication2;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            PublicClass pc = new PublicClass();
            PublicClass.Num = 100;
            Console.WriteLine(PublicClass.Num);            AppDomain ap = AppDomain.CreateDomain("Domain1");
            Person wang = (Person)ap.CreateInstanceAndUnwrap("ConsoleApplication2"
                , "ConsoleApplication2.Person");
            wang.Show();
            Console.ReadKey();
        }
    };
}
结果是:
100
0
为什么是这样呢,不是说共享程序集在内存中就只有一份副本吗,为什么结果是不一样的数值呢?

解决方案 »

  1.   

    "共享程序集在内存中就只有一份副本吗"的说法是从哪里来的?
    你的试验不是证明了GAC下的程序集也会被加载到不同的AppDomain下?我所知道的是mscorlib.dll等系统dll,出于性能考虑,会在AppDomain间共享。
      

  2.   

    与私有程序集相对的是共享程序集(Shared Assembly),它提供多个应用程序域访问同一个程序集的能力,特别地,内存中只存在该程序集的同一份副本,这种非特定于域的代码共享极大节省了内存资源占用。并且,在大多数情况下,共享程序集安装在全局程序集高速缓冲存储器(Global Assembly Cache)中而不存在于应用程序相关目录下,对它的引用不会产生文件复制,自然也不会产生额外的副本。因而,共享程序集不能简单通过XCOPY命令实现部署,而应使用MSI(Microsoft Windows Installer)进行。当组件和主应用程序不由同一个开发商建立,或者一个大应用程序分布在几个小工程中时,常常需要使用共享程序集。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/21aspnet/archive/2004/10/29/158865.aspx
      

  3.   

    1、建议你搜索"appdomain-nuetral assembly"关键词
    2、不同的CLR宿主可以选择不同的装载方式(比如asp.net选择共享强命名程序集)。
    3、即使在不同AppDomain间共享程序集,对于静态成员,不同的AppDomain将维持不同的版本。有兴趣可以阅读前微软CLR Team成员cbrumme的文章:
    AppDomains ("application domains")以及JunFeng Zhang的博文:
    Domain Neutral Assemblies