无法在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的值,我看到它是"/"

如何解决这个问题?

无法在MVC中加载AppDomain的文件或程序集

我将ApplicationPath设置为我放置程序集的路径:

appdomainSetup.ApplicationPath = @"c:'path";

因为这个程序集是由web项目引用的,我希望我的程序集包含在与我的web项目相同的目录中,所以我可以使用相对路径(很像bin文件夹的工作)。然而,无论出于何种原因,这都不起作用。到目前为止,指定服务器上的完整路径是唯一可行的解决方案。