【问题标题】:Strange SerializationException for Enum in AppDomainAppDomain 中枚举的奇怪序列化异常
【发布时间】:2010-02-09 09:09:49
【问题描述】:

当从一个 AppDomain 调用到另一个 AppDomain 时,我收到一个枚举的 SerializationException:

System.Runtime.Serialization.SerializationException: 未为成员解析类型 'Dummy.MyEnum,Dummy, 版本=1.0.0.0, Culture=neutral, PublicKeyToken=null'。

示例代码:

public enum MyEnum
{    
  A = 0,    
  B = 1,    
  C = 2,
}

public class FooBar : MarshalByRefObject
{
  public void Test1(MyEnum dummy)
  {
  }

  public void Test2(object dummy)
  {
  }
}

这个调用会抛出异常:

 getFooBarInOtherAppDomain().Test1(MyEnum.A);

当使用任何其他可序列化类型时,它会成功:

 getFooBarInOtherAppDomain().Test2(0);

调用者、被调用者和枚举在同一个程序集中定义。

.Net 中的“类型未解析”是什么意思,为什么会抛出异常?默认情况下枚举不是可序列化的吗?

【问题讨论】:

  • 您是否从每个 App 域的 2 个不同位置加载程序集?

标签: c# .net serialization appdomain


【解决方案1】:

每个 AppDomain 都有自己的程序集探测路径,使用 AppDomainSetup 类进行配置。主 AppDomain 的 app.config 文件。在您的情况下,它似乎正在寻找要加载的程序集,但与用于序列化数据的程序集不同。它发现的那个缺少枚举类型。使用 Fuslogvw.exe 解决此问题,它可以让您查看正在解析的程序集。

【讨论】:

  • 谢谢,现在我有一个不同的问题,但这很有帮助!我不明白的是为什么序列化程序要第二次加载程序集? (FooBar 类在同一个程序集中,并且该类已经加载到 AppDomain 中,尽管是通过主 AppDomain 的探测路径)
  • 每个 AppDomain 加载自己的程序集。将它们视为一个轻量级的过程。
猜你喜欢
  • 2012-05-08
  • 2011-01-24
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 2013-02-07
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多