无法在MVC中加载AppDomain的文件或程序集
本文关键字:文件 程序集 AppDomain 加载 MVC | 更新日期: 2023-09-27 18:06:45
我通过:
将程序集加载到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应用程序中运行时,会出现错误:
通过不指定 ,我可以在单元测试中重现无法加载文件或程序集。名称继续'或其中之一其依赖关系。
FileNotFoundException
appdomainSetup.ApplicationBase
我怀疑这个问题与我设置为ApplicationBase的目录有关。在web程序中,我传递HttpContext.Current.Request.ApplicationPath
的值,我看到它是"/"
。
如何解决这个问题?
我将ApplicationPath设置为我放置程序集的路径:
appdomainSetup.ApplicationPath = @"c:'path";
因为这个程序集是由web项目引用的,我希望我的程序集包含在与我的web项目相同的目录中,所以我可以使用相对路径(很像bin
文件夹的工作)。然而,无论出于何种原因,这都不起作用。到目前为止,指定服务器上的完整路径是唯一可行的解决方案。