通过COM Interop使用System.IO.Packaging时,出现“无法确定域的身份”,有几篇文章描述了这种情况的发生原因,解决方案是在自己的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);

最佳答案

我自己解决了这个问题,忘了继承MarshalByRefObject的类。

它有点愚蠢,它允许您创建实例并调用它,除非它仍在默认域中运行,否则您会认为它会引发异常或其他事情,方法是将类标记为[Serializable()]并派生自MarshalByRefObject解决它。

10-04 18:52