【问题标题】:System.IO.FileNotFoundException: Could not load file or assembly 'X' or one of its dependencies when deploying the applicationSystem.IO.FileNotFoundException:部署应用程序时无法加载文件或程序集“X”或其依赖项之一
【发布时间】:2012-06-08 08:47:58
【问题描述】:

我在部署一个应用程序时遇到了一个奇怪的问题,该应用程序引用了一个用托管 c++ 编写的程序集。

我创建了一个程序集 X,对其进行编译并在一个名为 Starter 的 exe 文件中引用它。

Starter.exe 在本地主机上正常启动。但是,当我将启动调试文件夹的所有内容复制到虚拟机并尝试在那里启动时,它会崩溃并出现以下异常:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or 
assembly 'X' or one of its dependencies. The specified module could not be found.

这对我来说没有任何意义,因为 X 与 Starter.exe 位于同一文件夹中。

什么可能导致这个问题?

更新

我检查了目标机器上 Reflector 中的依赖关系,它能够找到所有这些的文件。

我还将所有项目的配置更改为 x86/win32。

更新

以下是来自 Fusion Log 的日志(位置:C:\FusionLog\Default\Starter.exe\X,版本=1.0.4538.22813,Culture=neutral,PublicKeyToken=null.HTM):

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/X.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
LOG: Binding succeeds. Returns assembly from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.
LOG: Assembly is loaded in default load context.

唯一的错误在 C:\FusionLog\NativeImage\Starter.exe\ 目录:

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = BookmarkWiz.Kernel, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null.
WRN: No matching native image found.
LOG: IL assembly loaded from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.

我无法对程序集进行签名,因为它引用了其他几个未签名的程序集

【问题讨论】:

标签: c# .net deployment .net-assembly managed-c++


【解决方案1】:

...无法加载文件或程序集“X”或其中一个依赖项 ...

很可能无法加载另一个依赖项。

您可以尝试使用依赖项遍历器检查依赖项。

即:https://www.dependencywalker.com/

同时检查您的构建配置 (x86 / 64)

编辑: 当我从“不受信任的”网络共享复制 zip 中的 dll 时,我也遇到过这个问题。该文件已被 Windows 锁定并引发 FileNotFoundException。

请看这里:Detected DLLs that are from the internet and "blocked" by CASPOL

【讨论】:

  • @ArsenZahray 那么你是如何解决这个问题的呢?我面临着类似的问题。 System.IO.FileNotFoundException: Could not load file or assembly 'Logging, Version=7.7.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
  • @vaibhav:您可以附加到 Assembly.Resolve 事件以找出缺少哪个程序集:docs.microsoft.com/de-de/dotnet/api/…
【解决方案2】:

我通过重命名 DLL 解决了这个问题。 DLL 在上传到其共享位置时已手动重命名(版本号附加到文件名)。从下载的文件中删除版本号解决了该问题。

【讨论】:

    【解决方案3】:

    我有同样的问题。对我来说,它有助于删除项目文件夹中的 .vs 目录。

    【讨论】:

    • 这对我没有帮助。
    【解决方案4】:

    我在尝试安装 Windows 服务时也遇到了同样的问题,在我的情况下,我设法通过删除服务 .exe 的文件夹路径中的空格来解决这个问题,下面是对我有用的命令命令提示符

    cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

    按 ENTER 更改工作目录

    InstallUtil.exe C:\MyService\Release\ReminderService.exe

    按回车

    【讨论】:

      【解决方案5】:

      对我来说,我是从 Windows 资源管理器中启动应用程序的(通过双击它)。然后它立即崩溃了。

      然后我打开了Event Viewer 的窗口并查看了Application,它显示了完整的堆栈跟踪错误。堆栈跟踪显示与位图或图像的关系。后来发现是因为找不到应用图标

      【讨论】:

        【解决方案6】:

        伙计们,我阅读了有关该主题的每个论坛我仍然遇到问题(尝试从 git 进行项目)

        经过 4 小时和大量的咒骂后,我自己解决了这个问题,方法是更改​​项目属性中的目标框架设置(右键单击项目 -> 属性) -> 应用程序并将目标框架从 .net core 3.0 更改为 .net 5.0 希望对大家有所帮助

        快乐编码 gl hf 书呆子

        【讨论】:

          猜你喜欢
          • 2022-11-02
          • 2017-10-16
          • 2021-12-12
          • 2012-01-14
          • 1970-01-01
          相关资源
          最近更新 更多