Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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# MVC登录页面可以';即使已动态加载DLL,也找不到它_C#_Asp.net Mvc_Dll_Plugins - Fatal编程技术网

C# MVC登录页面可以';即使已动态加载DLL,也找不到它

C# MVC登录页面可以';即使已动态加载DLL,也找不到它,c#,asp.net-mvc,dll,plugins,C#,Asp.net Mvc,Dll,Plugins,我有一个MVC登录页面,我正在尝试使用一些我已经为其他目的创建的.dll。这些.dll实际上是插件,它们位于我的网页中的/CorePlugins文件夹中,并在运行时通过PreApplicationStartMethod动态加载。以下是我加载这些.dll的方式: var corePluginAssemblyFiles = CorePluginsFolder.GetFiles("*.dll", SearchOption.AllDirectories); foreach (var assemblyF

我有一个MVC登录页面,我正在尝试使用一些我已经为其他目的创建的.dll。这些.dll实际上是插件,它们位于我的网页中的
/CorePlugins
文件夹中,并在运行时通过PreApplicationStartMethod动态加载。以下是我加载这些.dll的方式:

var corePluginAssemblyFiles = CorePluginsFolder.GetFiles("*.dll", SearchOption.AllDirectories);

foreach (var assemblyFile in corePluginAssemblyFiles)
{
    var assembly = Assembly.LoadFile(assemblyFile.FullName);
    System.Web.Compilation.BuildManager.AddReferencedAssembly(assembly);
}
现在,在这些插件中,我实际上能够以我想要的任何方式来回引用,并且一切都很好。但是,当尝试从我的登录页面LoginController(在/bin文件夹中,而不是/CorePlugins文件夹中)使用一个时,它表示找不到有问题的.Dll:

无法加载文件或程序集“Core.API.UserMgmt,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。找不到网络路径。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.IO.FileNotFoundException:无法加载文件或程序集“Core.API.UserMgmt,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。找不到网络路径

源文件:C:\svn\HomeCenter\u DEV\HomeCenter\HomeCenter.Core\Controllers\LoginController.cs行:202

程序集加载跟踪:以下信息有助于确定无法加载程序集“Core.API.UserMgmt,Version=1.0.0,Culture=neutral,PublicKeyToken=null”的原因

==预绑定状态信息===

日志:DisplayName=Core.API.UserMgmt,版本=1.0.0.0,区域性=neutral,PublicKeyToken=null (详细说明)

日志:Appbase=file:///C:/svn/HomeCenter_DEV/HomeCenter/HomeCenter.Core/

日志:初始PrivatePath=NULL

调用程序集:HomeCenter.Core,版本=1.0.0.0,区域性=中性,PublicKeyToken=null

===

日志:此绑定在默认加载上下文中启动

日志:使用应用程序配置文件:C:\svn\HomeCenter\u DEV\HomeCenter\HomeCenter.Core\web.config

日志:使用主机配置文件:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config

日志:使用C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config中的计算机配置文件

日志:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)

日志:以前看到过相同的绑定,但由于hr=0x80070035而失败


为了好玩,我也在/bin文件夹中放了一个.DLL的副本,结果它说它不能加载程序集,因为它已经加载了。所以现在我在想到底是什么。因此,使用一些测试代码,我从System.Web.Compilation.BuildManager.GetReferenceAssemblys()AppDomain.CurrentDomain.GetAssemblys()打印了加载的程序集,实际上我看到了我试图使用的.DLL
Core.API.UserMgmt,版本=1.0.0,区域性=中立,PublicKeyToken=null
。这是怎么回事?为什么它找不到已经加载的DLL呢。如果我将.dll放在/bin文件夹中,并将其从
/CorePlugins
文件夹中删除,它会工作,但我设置的所有其他内容都会中断。我需要将.dll放在
/CorePlugins
文件夹中。

我不太记得是哪篇文章导致我解决了这个问题,但本质上是在我的
Web.Config
中的
assemblyBinding
部分添加了
探测
元素,这就解决了我的问题



我必须添加我想要包含的每个DLL的根文件夹,因为我不知道如何让它递归遍历目录。

我不太记得我找到了哪篇文章导致我解决了这个问题,但本质上,在我的
Web.Config
中的
assemblyBinding
部分添加
prospecting
元素就是解决这个问题的方法



我必须添加每个要包含的DLL的根文件夹,因为我不知道如何让它递归遍历目录。

它可能位于asp.net临时文件位置?我知道文件的位置,并通过AddReferenceAssembly()加载它,但问题来自LoginController,它说它找不到它,即使我在检查加载的程序集时可以看到库已加载。它可能位于asp.net临时文件位置?我知道文件在哪里,我通过AddReferenceAssembly()加载它,但问题是LoginController说它找不到它,即使我在检查加载的程序集时可以看到库已加载。