简短版本:我试图自定义跨AppDomain边界的序列化,特别是处理AppDomain的每一侧都有稍微不同版本的类的情况。我该怎么做呢?跨应用程序域的自定义序列化
长版本:我们使用AppDomains来管理较大应用程序下的不同子模块。我们希望独立部署这些子模块,因此可以使用AppDomains。我们在主应用程序和子模块之间有一个共享的合同dll,不同版本的合同dll可能会在各个子模块中结束,因为每个子模块的更新频率都比主应用程序更少。因此,有时会在合约dll中添加新字段或新类型,并在主应用程序中使用,但子模块不知道如何序列化它。
我想我可以通过自定义序列化过程,特别是SerializationBinder.BindToType来解决这个问题。但是为了做到这一点,我需要告诉AppDomain的每一面使用这个序列化绑定器。我该怎么做呢?我在网上看到的所有示例都对Serialize()和Deserialize()进行了明确的调用。我初始化AppDomain的代码是:
var appDomainSetup = new AppDomainSetup
{
ApplicationBase = config.BasePath,
ShadowCopyFiles = "true",
ConfigurationFile = File.Exists(configPath) ? configPath : null,
};
AppDomain.CreateDomain("myappdomain", null, appDomainSetup);
感谢您对此的帮助。
谢谢弗兰克。这很可能是我们长期的答案,我想我可以解决我们目前的问题,因为我们现在只有1个子模块。 – 2015-02-09 17:42:38