mvc3 アプリケーションがあります。アプリケーション プロジェクトに「Plugins」というサブフォルダがあります。
そのフォルダーに保存されているすべての dll は実行時に更新可能である必要があるため、appdomain を配置して新しいバージョンの dll をリロードします。そのため、すべてのプラグイン dll を別の appDomain にロードして、その shadowCopy プロパティを設定しようとしています。 .
SO、msdn、およびいくつかのブログを調べて、この「解決策」にたどり着きました。(これは Application_Start 中に呼び出されます)
static AppDomain pluginDomain;
static PluginHolder()
{
AppDomainSetup domainSetup = AppDomain.CurrentDomain.SetupInformation;
domainSetup.ApplicationName = "Plugins";
domainSetup.PrivateBinPathProbe = domainSetup.PrivateBinPath;
domainSetup.PrivateBinPath = GetPluginsDirectory();
domainSetup.ShadowCopyFiles = "true";
domainSetup.ShadowCopyDirectories = domainSetup.PrivateBinPath;
pluginDomain= AppDomain.CreateDomain("Plugins", null, domainSetup);
var item = pluginDomain.Load(File.ReadAllBytes(GetPluginsDirectory() + "Item.dll"));
}
「Item.dll」は、ロードしようとしている dll です。最後の行は、「ファイルまたはアセンブリ アイテム、またはその依存関係の 1 つを読み込めませんでした」をスローします。これは他の人が成功した方法のようですが、私にはうまくいきません。
私は AppDomains の経験がないので、この問題にどのようにアプローチするか、または正しく取り組んでいるかどうかわかりません。
新しい AppDomain を介してアセンブリをロードすることは問題ありませんか?