同一域中相同静态成员的不同值

时间:2014-10-06 06:23:25

标签: c# static

我正在使用VC ++项目托管一个C#程序。这个C#程序正在使用Remoting命名空间和以下方法初始化Remoting:

public static void Create(...)
{
    var type = typeof(ClassA);

    RemotingConfiguration.RegisterWellKnownServiceType(type, ServiceNAME, WellKnownObjectMode.Singleton);
}

ClassA使用另一个类的静态成员,当在指定端口上发送数据时,Remoting会生成ClassA的实例;当发生这种情况时,另一个类(ClassB)中的静态成员将重新初始化。换句话说,我们在同一时间,相同的域和相同的进程中有两个不同的静态成员值(我已经检查过了)。

注意: ClassB是我的项目的一个类,它包含一些静态成员,当我使用以下命令时:

System.Reflection.Assembly.GetExecutingAssembly().GetType("ClassB").TypeHandle.Value

它在ClassA内部和它之外返回不同的值。

注意:此程序无需使用托管即可正常运行。我的托管项目适用于许多其他项目,没有什么特别的。

为什么静态成员有两个值?为什么TypeHandle的值对于相同的类型是不同的?

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样,但是后面的解决方案解决了我的问题:

在这个项目中,我处理AssemblyResolve事件。当Remoting想要创建ClassA的实例时,AssemblyResolve是用程序集名称本身触发的;在这种情况下,您应该存储指定的assemlby的程序集对象。当使用程序集名称返回AssemblyResolve方法时,返回存储的程序集对象。