Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个具有依赖项的文件夹加载另一个appdomain中的程序集_C#_.net_Reflection_Marshalling_Appdomain - Fatal编程技术网

C# 从另一个具有依赖项的文件夹加载另一个appdomain中的程序集

C# 从另一个具有依赖项的文件夹加载另一个appdomain中的程序集,c#,.net,reflection,marshalling,appdomain,C#,.net,Reflection,Marshalling,Appdomain,我已经找到了这个问题的一些变体,但当您希望加载程序集时,混合所有这些标准似乎会产生它自己的一组错误 在另一个appdomain中 从另一个文件夹 具有附加依赖项 我需要所有这些来加载我的第三方插件,并找到一些看起来像解决方案但在这里不起作用的东西: 我甚至在浏览所有的注释时都没有做到这一点,但在引用的程序集上仍然会出现FileNotFoundExceptions。 然而,我在其中一条评论中找到了一个适合我需要的框架: 但这似乎也不起作用,下面是我在这个框架中使用的示例代码,但仍然得到一个文件

我已经找到了这个问题的一些变体,但当您希望加载程序集时,混合所有这些标准似乎会产生它自己的一组错误

  • 在另一个appdomain中
  • 从另一个文件夹
  • 具有附加依赖项
我需要所有这些来加载我的第三方插件,并找到一些看起来像解决方案但在这里不起作用的东西: 我甚至在浏览所有的注释时都没有做到这一点,但在引用的程序集上仍然会出现FileNotFoundExceptions。 然而,我在其中一条评论中找到了一个适合我需要的框架: 但这似乎也不起作用,下面是我在这个框架中使用的示例代码,但仍然得到一个文件未找到异常

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&remoting API要干净得多。

好的,最后我找到了罪魁祸首。 由于我在域上调用GetAssembly,它同时将它们加载到AppDomain(调用解析器)和我当前的根域(当它获取作为GetAssembly返回的程序集对象时,也需要加载程序集)
为了修复它,我必须在本地和远程域上设置解析器,但是这是一个坏主意,因为它消除了在另一个AppDomain中加载的隔离优势,因此,我决定不调用getAssembly,在子域上进行反射工作,并将结果返回到原始域。

-1:到目前为止,这篇文章缺少任何类型的问题。“似乎不起作用”既不是对问题或问题的详细解释@Ronan:请提出一个问题,我们可以帮助您解决您的问题…您好,不工作意味着我放弃了它,我想要的是让框架工作很抱歉,如果不清楚,但我的问题是如何让我粘贴的代码正常工作,没有例外,在我看来,它应该按照文档和单元测试的要求工作。实际上,正如我在代码注释中所问的那样,-1是不值得的,但我看到了发生了什么,它滚动了过去的视图:(现在正在修复格式化,问题是关于代码中的异常(注释在哪里)嘿,Ronan,我是AppDomainToolkit的作者,我很想了解更多关于你用它无法解决的问题。我会尝试和上面的场景一起玩,看看我是否可以复制它,如果可以的话,我希望改进ADT,这样其他人就不会有同样的问题。如果有问题,请通过我的twitter手柄联系我如果需要,您还有其他信息要传递。很抱歉给您带来麻烦!