Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#can';找不到已加载的程序集_C#_.net - Fatal编程技术网

C#can';找不到已加载的程序集

C#can';找不到已加载的程序集,c#,.net,C#,.net,我正在编写一个使用插件的应用程序。插件是位于插件目录中的类库。我的应用程序通过LoadFrom加载这些库。其中一些插件以库的形式存在依赖关系,这些库位于同一个插件目录中。当我试图通过Activator.CreateInstance从一个插件创建类的实例时,我收到一个异常“找不到程序集”(这是插件的依赖程序集),但该程序集已与插件一起加载(!),并且在ProcessExplorer中可见。 我无法理解我的问题所在。您应该提供程序集文件的完整路径 class Program { static

我正在编写一个使用插件的应用程序。插件是位于插件目录中的类库。我的应用程序通过LoadFrom加载这些库。其中一些插件以库的形式存在依赖关系,这些库位于同一个插件目录中。当我试图通过Activator.CreateInstance从一个插件创建类的实例时,我收到一个异常“找不到程序集”(这是插件的依赖程序集),但该程序集已与插件一起加载(!),并且在ProcessExplorer中可见。
我无法理解我的问题所在。

您应该提供程序集文件的完整路径

class Program
{
    static void Main(string[] args)
    {
        var asmFileName = "test.dll"; // Your plug-in file name
        var asmPath = AppDomain.CurrentDomain.BaseDirectory; // Your assemblies's root folder
        var asmFullPath = System.IO.Path.Combine(asmPath, asmFileName);
        var asm = System.Reflection.Assembly.LoadFrom(asmFullPath);
    }
}

您的问题可能是,卸载的程序集与请求程序集的版本不同。Net运行时将程序集映射到其名称后和版本后(如果名称相同,版本不同),如果加载了另一个程序集,则会出现异常,表示“找不到程序集”或类似的情况。问题是,组件无法正确匹配。但有一个解决方案:
有关该问题的更多信息,请参阅

该问题的解决方案:
  • 如果必须加载该程序集的2个版本,请尝试通过实现示例来帮助运行时
  • 尝试使用来确定插件的依赖关系并交叉检查您的问题
  • 如果你处理插件,我建议无论如何都要实现这个事件, 因此,您可以记录该AppDomain的所有程序集请求

    您将找到有关运行时行为和程序集加载的更多信息

    希望我能帮忙,请给我们反馈您的解决方案

    配置插件文件夹
  • 将插件加载到将pluginfolder作为ApplicationBase的中,以配置AppDomains这是加载插件的推荐解决方案,因为您可以定义AppDomain的级别(沙箱)
  • 扩展当前路径,因此它还会搜索此路径中的程序集。这种方法已经过时了!(但这是你的工作吗)

  • 我也遇到过类似的问题,通常通过在项目属性中更改目标框架来解决…

    能否提供一个简短但完整的示例来说明问题?为什么不共享代码?解决这个问题会更容易。除了Jon建议的之外,您还应该提供您正在使用的CLR版本以及操作系统(32位/64位)。另外,您是否使用多个应用程序域,是否显式设置了值?我们遇到了一些奇怪的问题w.r.t.所有这些都是在32位和64位上使用CLR 2.0。我的操作系统是64位的,但我不知道如何学习CLR版本:(
    AssemblyResolve
    是解决方案-问题是运行时不知道关于其插件文件夹的任何信息,因此在执行其自己的依赖项加载时忽略它。这适用于已通过
    LoadFrom
    -
    LoadFrom
    加载的DLL通常是不好的。添加了另一种解决方案来定义plugin folder.AppendPrivatePath帮助…谢谢。不客气,请将问题标记为已回答:-),谢谢!