AppDomain 之间是不是共享静态类? [复制]

Posted

技术标签:

【中文标题】AppDomain 之间是不是共享静态类? [复制]【英文标题】:Are static class shared between AppDomain? [duplicate]AppDomain 之间是否共享静态类? [复制] 【发布时间】:2017-02-20 09:16:39 【问题描述】:

我有四个程序集,ModuleStatic、Loader 和 ModuleA 和 ModuleB,除了 Loader 是可执行文件之外,它们都是 DLL。

在 DLL ModuleStatic 中:

public class ModuleStatic 
    public static string Foo  get; set;  = "Foo";    

在Loader中,ModuleA和ModuleB会通过Assembly.Load和AppDomain分别加载到domA和domB。如果ModuleA修改了ModuleStatic.Foo变量,domB中的ModuleB会收到修改吗?

【问题讨论】:

【参考方案1】:

不,变量,无论是否静态,都不会在AppDomains 之间共享。实例存在于它们自己的 AppDomain 中,除非您为它做一些工作,否则它们不会交叉,例如通过将其设置为 MarshalByRefObject 并复制静态“实例”。

【讨论】:

...或者当包含静态字段/属性的类型被标记为[Serializable]

以上是关于AppDomain 之间是不是共享静态类? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果跨应用程序域访问类中的静态数据会怎样?

跨 appdomain 的静态类变量

在 .NET 中,创建新的 AppDomain 时是不是调用静态构造函数?

子类是不是共享 C++ 中父类的静态变量? [复制]

如何在两个 .NET AppDomain 之间传递未知类型?

跨 AppDomain 的自定义序列化