AppDomain 中枚举的奇怪 SerializationException

发布于 2024-08-20 22:40:36 字数 747 浏览 4 评论 0原文

从一个 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 中的“类型未解析”是什么意思?为什么会抛出异常?枚举默认情况下不是可序列化的吗?

I am getting a SerializationException for an enum when calling from one AppDomain into another:

System.Runtime.Serialization.SerializationException:
Type is not resolved for member
'Dummy.MyEnum,Dummy, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null'.

Sample code:

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

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

  public void Test2(object dummy)
  {
  }
}

This call will throw the exception:

 getFooBarInOtherAppDomain().Test1(MyEnum.A);

When using any other serializable type it succeeds:

 getFooBarInOtherAppDomain().Test2(0);

Caller, callee and enum are defined in the same assembly.

What does .Net mean with "Type is not resolved" and why is the exception thrown? Aren't enums serializable by default?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾冷 2024-08-27 22:40:36

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

Each AppDomain has its own probing path for assemblies, configured with the AppDomainSetup class. The app.config file for the primary AppDomain. It looks like in your case it is finding an assembly to load but a different one from the one that was used to serialize the data. The one it found is missing the enum type. Troubleshoot this with Fuslogvw.exe, it lets you see what assemblies are being resolved.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文