8

Managed Add-In Framework(MAF)を使用したプラグインベースのアーキテクチャを備えたプログラムがあります。アドインアセンブリを独自のプロセスで実行する方法でロードしようとしています。ロードする他のアセンブリを探す場所を指定できます。以下は、私が試した2つの異なる方法と、それらが100%機能しない理由です。

AppDomain _domain;

// Create application domain setup information.
AppDomainSetup domaininfo = new AppDomainSetup();

// Configure
domaininfo.ApplicationName = PluginName;
domaininfo.ApplicationBase = MyPath;
domaininfo.PrivateBinPath = MyPath;
domaininfo.LoaderOptimization = LoaderOptimization.MultiDomain;
domaininfo.DisallowApplicationBaseProbing = false;
domaininfo.DisallowBindingRedirects = false;
domaininfo.DisallowCodeDownload = false;
domaininfo.DisallowPublisherPolicy = false;

System.Security.Policy.Evidence adevidence = AppDomain.CurrentDomain.Evidence;
// Create the new application domain using setup information.
_domain = AppDomain.CreateDomain(PluginName + "_Domain", adevidence, domaininfo);

_addin = _token.Activate<IOpenSourceAutomationAddInv2>(_domain);

このメソッドを使用すると、各アドインに新しいアプリドメインで実行するように指示でき、追加のアセンブリを探す場所を指定できます。各アドインは独自のサブディレクトリにあり、他のアセンブリをロードするには、ホストと同じディレクトリを検索する必要があるため、これは重要です。このメソッドの問題は、アドインに未処理の例外がある場合、同じプロセスで実行されているためにホストがクラッシュすることです。

AddInProcess _process;
_process = new AddInProcess(Platform.AnyCpu);

_addin = _token.Activate<IOpenSourceAutomationAddInv2>(_process,AddInSecurityLevel.FullTrust);

このメソッドは、各アドインを独自のプロセスにロードするため、個々のアドインがクラッシュしても、ホストには影響しません。これに伴う問題は、追加のアセンブリを探す場所をアドインに指示できるかどうかがわからないことです。ホストのディレクトリではなく、自分のディレクトリのみを検索します。

私が探していることを達成するためにMAFを使用する最良の方法は何ですか?アドインを作成していないため、アドインをロードできるようにする必要があります。これは、アドインをホストから分離するための方法です。私は彼らのコードを制御できないので、彼らがホストをクラッシュさせないことを確認する必要があります。また、アドインは独自のサブディレクトリにあり、ホストディレクトリからアセンブリをロードする必要があるため、アドインがアセンブリをロードする場所を指定できる必要があります。また、可能であればGACを使用しないことをお勧めします。

4

1 に答える 1

1

アドインが信頼されていない場合、2 番目のソリューションのように別のプロセスを使用してアドインをロードすることをお勧めします。

参照については、おそらく、各アドインがそのプライベート ディレクトリ内を参照するのが正しいでしょう。それ以外の場合、互換性のない異なる参照でコンパイルされた 2 つのアドインが問題になる場合があります。

本当に共通ディレクトリを強制したい場合は、2 つの解決策を考えることができます。

  • AddInProcess.exe.Config を使用すると、http://msdn.microsoft.com/en-us/library/823z9h8w.aspx のようにプローブ ディレクトリを指定できます。
  • アドインをアクティブ化する前に、すべてのホスト参照をアドイン ディレクトリにコピーします。
于 2013-01-05T00:32:34.563 に答える