簡體   English   中英

即使已經動態加載了MVC登錄頁面,也找不到DLL

[英]MVC login page can't find a DLL even though it is already been dynamically loaded

我有一個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,版本= 1.0.0.0,區域性=中性,公共密鑰令牌=空”或其依賴項之一。 找不到網絡路徑。 說明:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤,以獲取有關錯誤及其在代碼中起源的更多信息。

異常詳細信息:System.IO.FileNotFoundException:無法加載文件或程序集“ Core.API.UserMgmt,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依賴項之一。 找不到網絡路徑。

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

程序集加載跟蹤:以下信息有助於確定為什么無法加載程序集“ Core.API.UserMgmt,版本= 1.0.0.0,區域性=中性,PublicKeyToken = null”。

===預綁定狀態信息===

日志:DisplayName = Core.API.UserMgmt,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null(完全指定)

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

日志:初始PrivatePath = NULL

調用程序集:HomeCenter.Core,版本= 1.0.0.0,文化=中性,PublicKeyToken =空。

===

日志:此綁定在默認的加載上下文中啟動。

日志:使用應用程序配置文件:C:\\ svn \\ HomeCenter_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。

因此,只為咯咯地笑,我也將.DLL的副本放置在/ bin文件夾中,並且低一點,它說它無法加載程序集,因為該程序集已加載。 所以現在我在想什么。 因此,使用一些測試代碼,我從System.Web.Compilation.BuildManager.GetReferencedAssemblies()AppDomain.CurrentDomain.GetAssemblies()中打印了加載的程序集,實際上,我確實看到了我正在嘗試使用Core.API.UserMgmt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null的.DLL。 Core.API.UserMgmt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 那么這是怎么回事? 為什么找不到明顯已經加載的DLL。 如果將.dll放在/ bin文件夾中並將其從/CorePlugins文件夾中刪除,則它可以工作,但是隨后我設置的所有其他內容都將中斷。 我需要.dll位於/CorePlugins文件夾中。

我不太記得是哪條帖子導致我解決了這個問題,但是從本質上來說,在Web.Config assemblyBinding部分中添加了一個probing元素對我來說就是解決此問題的方法。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="folder\subFolder1;folder\subFolder2;folder\subFolder3" />
      <!--  Other stuff -->
</assemblyBinding>

我必須添加要包含的每個DLL的根文件夾,因為我不知道如何獲取它以遞歸方式遍歷目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM