通过 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 继承我的类。
它有点愚蠢,它允许您创建一个实例并调用它,但它仍然在默认域中运行,您会认为它会抛出异常或其他东西,无论如何将类标记为 [Serialized()] 并从 MarshalByRefObject 派生修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)