Странное SerializationException для Enum в AppDomain - PullRequest
3 голосов
/ 09 февраля 2010

Я получаю исключение SerializationException для перечисления при вызове из одного домена приложений в другой:

System.Runtime.Serialization.SerializationException: Тип не разрешен для члена 'Dummy.MyEnum, Dummy, версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = ноль '.

Пример кода:

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);

Caller, callee и enum определены в одной сборке.

Что означает .Net с "Тип не разрешен" и почему выдается исключение? Разве перечисления не сериализуются по умолчанию?

1 Ответ

1 голос
/ 09 февраля 2010

Каждый AppDomain имеет свой собственный путь поиска для сборок, настроенный с помощью класса AppDomainSetup. Файл app.config для основного домена приложений. Похоже, в вашем случае он находит сборку для загрузки, но отличается от той, которая использовалась для сериализации данных. Тот, который был найден, не имеет тип enum. Устраните неисправность с помощью Fuslogvw.exe, он позволяет увидеть, какие сборки разрешаются.

...