我正在使用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的值对于相同的类型是不同的?
答案 0 :(得分:0)
我不知道为什么会这样,但是后面的解决方案解决了我的问题:
在这个项目中,我处理AssemblyResolve事件。当Remoting想要创建ClassA的实例时,AssemblyResolve是用程序集名称本身触发的;在这种情况下,您应该存储指定的assemlby的程序集对象。当使用程序集名称返回AssemblyResolve方法时,返回存储的程序集对象。