我发现了这个问题的一些变体,但是当您希望加载程序集时,混合所有这些标准似乎会产生它自己的一组错误
- 在另一个应用程序域中
- 从另一个文件夹
- 有额外的依赖
我需要所有这些来加载我的第三方插件并找到一些看起来像解决方案但在这里不起作用的东西:How to Load an Assembly to AppDomain with all references recursive? 即使浏览了所有评论,我也没有设法让其中任何一个工作,我仍然在引用的程序集上得到 FileNotFoundExceptions。但是,我在其中一个评论中找到了一个可以满足我需求的框架:https ://github.com/jduv/AppDomainToolkit 但这似乎也不起作用,这是我与此框架一起使用的示例代码,但我仍然收到文件未找到异常
var uploadedPluginsDirectories = new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(),"UploadedModules"));
foreach(var uploadedPluginsDirectory in uploadedPluginsDirectories.GetDirectories())
{
foreach (var pluginFile in uploadedPluginsDirectory.GetFiles("*.dll")
.Where(f=>f.Name == "DeepSearch.Modules.Excel.Graphs.dll"))
{
var context = AppDomainContext.Create();
int Count = context.Domain.GetAssemblies().Count();
context.RemoteResolver.AddProbePath(pluginFile.Directory.FullName);
var load = context.LoadAssemblyWithReferences(LoadMethod.LoadFrom, pluginFile.FullName);
// This crashes complaining about FileNotFoundException on one of the assemblies referenced by the one i'm trying to load, they both are in pluginFile.Directory.FullName
Count = context.Domain.GetAssemblies().Count();
Count.ToString();
}
}
编辑:为了澄清所要求的评论,我正在寻求帮助以使代码段正常工作,因为如上所述,我遇到了一个例外,我只提到了我之前尝试列出的对我来说失败的选项,但我'正在寻求帮助,而不是以前的选项,因为这似乎比我自己使用 AppDomain 和远程 API 更干净。