4

通过 COM 互操作使用 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);
4

1 回答 1

1

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

它有点愚蠢,它允许您创建一个实例并调用它,除非它仍在默认域中运行,您会认为它会抛出异常或其他东西,无论如何通过将类标记为 [Serializable()] 并派生自 MarshalByRefObject修复它。

于 2012-05-10T23:37:00.750 回答