无法加载{myassembly}导入的过程

当运行prorgam时,我似乎错过了一个库,当我启动项目的输出时,我在启动时遇到exception。

A first chance exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll An unhandled exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll Additional information: A procedure imported by 'my assembly, Version=xx.1.1.0, Culture=neutral, PublicKeyToken=7292581204d9e04a' could not be loaded. 'ScriptX.vshost.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', No symbols loaded. 

我的问题是:如何确定哪个库丢失,因为此时我看不到传递给的值:

 mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x3a bytes 

事实上,只有这些诊断的内置机制。

(1)在项目属性/ Debug中,确保选中“启用本机代码调试”:

在此处输入图像描述

(2)提升show-loader-snaps标志 – 它是IFEO中的注册表键,可通过’GlobalFlags’GUI访问:

在此处输入图像描述

(3)运行应用程序并检查( 非常 )详细的输出窗格。 你可以大多跳到最后或寻找’错误’。

更多细节在这里 。

你在做任何dllimport吗? – 这看起来像是一个没有找到非托管DLL的问题?

首先要确保你正在调用的任何非托管dll或exe(通过dllimport)被部署到与你正在构建的.Net exe相同的文件夹中

如果调用程序集的源不可用,您可以尝试在该程序集上使用reflection器来搜索dllimport语句

除此之外,您可能希望启用fustion日志查看器来跟踪程序集加载问题 – 有关详细信息,请参阅此博客文章和msdn页面

为AppDomain.AssemblyResolve事件实现处理程序。 它通过ResolveEventArgs.Name告诉您正在查找哪个程序集。 如果这只是对此特定程序集进行故障排除的工作,请使用Fuslogvw.exe。 如果挂起是一个非托管程序集,那么DependencyWalker的Profile选项可以显示LoadLibrary()调用失败的内容。 SysInternals的ProcMon也会起作用,但是噪音很大。