无法使用System.IO.Packaging确定域的标识

时间:2012-05-10 13:20:49

标签: com interop appdomain system.io.packaging

当通过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);

1 个答案:

答案 0 :(得分:1)

我自己解决了这个,我忘了从MarshalByRefObject继承我的班级。

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