Невозможно определить личность домена с помощью System.IO.Packaging

Я получаю сообщение "Невозможно определить личность домена" при использовании System.IO.Packaging через COM Interop, есть несколько статей, описывающих, почему это происходит, и решение состоит в том, чтобы запустить функцию-нарушитель в своем собственном AppDomain.

Итак, я взял пример кода, который выглядит как показано ниже, но я все еще получаю сообщение об ошибке, мне интересно, что я делаю неправильно, а также, с VS 2010 он говорит, что AddAssembly и AddHost устарели - интересно, означает ли это, что они больше не являются реализовано, но если это так, я действительно не понимаю, как использовать новые методы (AddAssemblyEvidence и AddHostEvidence)??

 AppDomainSetup setup = new AppDomainSetup();
 setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;

 Evidence evidence = new Evidence(AppDomain.CurrentDomain.Evidence);
 evidence.AddAssembly(Assembly.GetExecutingAssembly().FullName);
 evidence.AddHost(new Zone(SecurityZone.MyComputer));

 AppDomain domain = AppDomain.CreateDomain("BlobPackage", evidence, setup);

 BlobPackage blob_interal = (BlobPackage)domain.CreateInstanceAndUnwrap(typeof(BlobPackage).Assembly.FullName, typeof(BlobPackage).FullName);

 blob_interal.pack(FilePath, RootPath, m_source_files); <-- STILL FAILS

 AppDomain.Unload(domain);

1 ответ

Решение

Я решил это сам, я забыл унаследовать свой класс от MarshalByRefObject.

Это немного глупо, он позволяет вам создавать экземпляр и вызывать его, за исключением того, что он все еще работает в домене по умолчанию, вы могли бы подумать, что он все равно сгенерирует исключение или что-то еще, отметив класс как [Serializable()] и производный от MarshalByRefObject исправляет это.

Другие вопросы по тегам