4

COM相互運用機能を介してSystem.IO.Packagingを使用すると、「ドメインのIDを特定できません」というメッセージが表示されます。これが発生する理由を説明する記事がいくつかあり、解決策は、問題のある関数を独自のAppDomainで実行することです。

だから私は以下のようなサンプルコードを取りましたが、それでもエラーが発生します、私は何が間違っているのか疑問に思っています、そしてまた、VS2010では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 に答える