私はすでにTHISとTHISの質問を見ましたが、どちらも数年前のものであり、私の場合は別の解決策があるかもしれません:
THISに基づくプラグイン システムを備えた ASP.NET MVC 5 アプリケーションがあります。
したがって、私の~/bin
フォルダーはフレームワークによってシャドウコピーされ、上記のリンクで説明されているように、私のフォルダーはアプリケーションの初期化前に~/Plugins
「手動シャドウコピー」を使用しています。
現在、次のケースがあるため、これはこれまでのところ問題なく機能していました。~/Plugins/ShadowCopy
AppDomain
サンドボックス化されたコードを実行するために、別の制限を作成します。
アセンブリで定義された型を持つオブジェクトをこのドメインに渡すことができるようにするために、このドメインをApplicationBase
メイン ドメインのシャドウ コピー ディレクトリに設定します (そこからそれらをロードしない場合SerializationException
、型/オブジェクトを 2 番目に渡すときにドメイン (この型を定義するアセンブリが別の場所から読み込まれるため)。
これで、「ベース アセンブリ」で定義された型をこの 2 番目のドメインに渡すことができます。
しかし、プラグインで定義されたタイプを使用したい場合、これは失敗します。これは、プラグイン アセンブリがデフォルトのシャドウ コピー ディレクトリではなく、「手動シャドウ コピー ディレクトリ」にあるためです。
また、このディレクトリもまったく別の場所にあるPrivateBinPath
ため、ベースパスの下にある必要があるため、追加できません。
現時点では、次の「回避策」を使用しています。
#pragma warning disable 0618
AppDomain.CurrentDomain.SetShadowCopyPath(String.Join(";",
HostingEnvironment.MapPath("~/bin"),
HostingEnvironment.MapPath("~/Plugins/ShadowCopy")));
#pragma warning restore 0618
pre-init メソッドで。これにより、「手動シャドウ コピー ディレクトリ」がデフォルトのシャドウ コピー ディレクトリに追加され、プラグインもフレームワークによってシャドウ コピーされ、2 番目のプラグインはAppDomain
それらをロードでき、すべてが多かれ少なかれ機能しています。
しかし、SetShadowCopyPath
廃止されたので、実際の質問
に行き着きました。廃止された方法を回避するためのより良い解決策を探しています。
私は次の解決策を考えましたが、それが可能かどうか/どのように可能かを知ることができませんでした:
- プロパティを toおよびviaに設定
AppDomain
してを作成するように IIS を構成します。AppDomainSetup.ShadowCopyDirectories
~/bin
~/Plugins/ShadowCopy
web.config
- シャドウコピーディレクトリをegに移動し、
~/bin/Plugins
IISAppDomain
にこのフォルダーのメインの変更をリサイクルしないように指示します(そうしないと、pre-initメソッドが毎回そこのファイルを変更するため、リクエストごとにアプリが再起動します)
別のアイデアは、「手動シャドウコピーディレクトリ」をデフォルトのシャドウコピーディレクトリの下に設定すること~/Plugins/ShadowCopy
ですC:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\69da84c5\cd056104\Plugins
.
私は、この問題の解決策だけでなく、基本的な問題を解決するための別のアプローチにもオープンです。