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

本文关键字:静态成员 | 更新日期: 2023-09-27 18:25:36

我正在主持一个带有VC++项目的C#程序。这个C#程序使用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值不同?

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

我不知道为什么会发生这种情况,但以下解决方案解决了我的问题:

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