2012-05-10 12 views
4

System.IO.Packagingを使用してCOM Interopを使用すると「ドメインのIDを特定できません」というメッセージが表示されます。解決策は、それ自体のAppDomainで問題の機能を実行することです。System.IO.Packagingを使用してドメインのIDを特定できない

私は以下のように見えるサンプルコードを取ったが、私はまだエラーが出ている、私は間違ってやって何をしているのだろうと思っている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

あなたは新しいメソッドをこのように使用することができます。 'evidence.AddAssemblyEvidence(新しいApplicationDirectory(Assembly.GetExecutingAssembly()フルネーム)。);' 'evidence.AddHostEvidence(新しいゾーン(SecurityZone.MyComputer));' – Kosau

答えて

1

私はMarshalByRefObjectから私のクラスを継承するのを忘れて、この1を自分で解決しました。

それはあなたがインスタンスを作成し、デフォルトのドメインで実行されている以外はそれを呼び出すことができますが、とにかくそのクラスを[Serializable()]とマークすることによって例外がスローされると思いますMarshalByRefObjectから派生すると、それが修正されます。

+1

マーキング'SerializableAttribute'を持つクラスと' MarshalByRefObject'からそれを派生させるクラスは、クロスappdomain呼び出しが考慮されている場合、やや排他的です。 – hypersw

関連する問題