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

Com 无法使用System.IO.Packaging确定域的标识,com,interop,appdomain,system.io.packaging,Com,Interop,Appdomain,System.io.packaging,当通过COM互操作使用System.IO.Packaging时,我发现“无法确定域的标识”。有几篇文章描述了发生这种情况的原因,解决方案是在自己的AppDomain中运行有问题的函数 因此,我使用了示例代码,看起来像下面的代码,但我仍然得到了错误,我想知道我做错了什么,而且,在VS 2010中,它说AddAssembly和AddHost已经过时了-我想知道这是否意味着它们不再被实现,但如果是这种情况,我真的不知道如何使用新方法(补充证据和补充证据) AppDomainSetup设置=新建AppD

当通过COM互操作使用System.IO.Packaging时,我发现“无法确定域的标识”。有几篇文章描述了发生这种情况的原因,解决方案是在自己的AppDomain中运行有问题的函数

因此,我使用了示例代码,看起来像下面的代码,但我仍然得到了错误,我想知道我做错了什么,而且,在VS 2010中,它说AddAssembly和AddHost已经过时了-我想知道这是否意味着它们不再被实现,但如果是这种情况,我真的不知道如何使用新方法(补充证据和补充证据)

AppDomainSetup设置=新建AppDomainSetup();
setup.ApplicationBase=AppDomain.CurrentDomain.BaseDirectory;
证据=新证据(AppDomain.CurrentDomain.证据);
证据.AddAssembly(Assembly.getExecutionGassembly().FullName);
证据.AddHost(新区域(SecurityZone.MyComputer));
AppDomain域=AppDomain.CreateDomain(“BlobPackage”,证据,设置);
BlobPackage blob_interal=(BlobPackage)domain.CreateInstanceAndUnwrap(typeof(BlobPackage).Assembly.FullName,typeof(BlobPackage).FullName);

blob_interal.pack(FilePath,RootPath,m_source_files);我自己解决了这个问题,忘了从MarshalByRefObject继承类


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

您可以通过以下方式使用新方法:
evidence.AddAssemblyEvidence(新的应用程序目录(Assembly.GetExecutionGassembly().FullName));
证据.AddHostEvidence(新区域(SecurityZone.MyComputer));
使用
序列化属性标记类,并从
MarshallByRefObject
派生类,在考虑跨appdomain调用时有点互斥。
 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);