System.IO.FileNotFoundException:在部署应用程序时无法加载文件或程序集“X”或其中一个依赖项

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

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

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

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位于同一文件夹中。

什么可能导致这个问题?

UPDATE

我已经在目标机器上检查了Reflector中的依赖项,并且能够找到所有这些文件的文件。

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

UPDATE

以下是Fusion Log的日志(位置:C:\ FusionLog \ Default \ Starter.exe \ X,Version = 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. 

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

…无法加载文件或程序集“X”或其依赖项之一

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

您可以尝试使用依赖性walker检查依赖项。

即: http : //www.dependencywalker.com/

还要检查构建配置(x86 / 64)

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

请参阅此处: 检测到来自互联网并被CASPOL“阻止”的DLL

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

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