次の方法でアセンブリを appdomain に読み込みます。
var appdomainSetup = new AppDomainSetup();
//string appBase = Environment.CurrentDirectory;
//string appBase = HttpContext.Current.Request.ApplicationPath;
appdomainSetup.ApplicationBase = _appBase;//System.Web.HttpContext.Current.Request.ApplicationPath: Injected into cstor
System.Diagnostics.Debug.WriteLine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase);
appdomainSetup.DisallowBindingRedirects = false;
appdomainSetup.DisallowCodeDownload = true;
appdomainSetup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
appDomain = AppDomain.CreateDomain("myAppdomain", null, appdomainSetup);
どこBLASSEMBLYLOCATION = "c:\path\myAssembly.dll";//for now just hard coded path
次に、別のメソッドでこのアセンブリから型を取得します。
var helperObject= appDomain.CreateInstanceAndUnwrap("myssembly.NameContinued", "myNamespace.BL.Helper") as Helper;//ERROR LINE HERE
これはすべて、単体テストでうまく機能します。ただし、Web アプリケーションを介して実行すると、これはエラーで爆発します。
ファイルまたはアセンブリ 'myssembly.NameContinued' またはその依存関係の 1 つを読み込めませんでした。
FileNotFoundException
指定しないことで単体テストで再現できます
appdomainSetup.ApplicationBase
この問題は、ApplicationBase として設定したディレクトリに関係していると思われます。Web プログラムでは、 と思われる値を渡しHttpContext.Current.Request.ApplicationPath
ます"/"
。
この問題を解決するにはどうすればよいですか?