运行prorgam时,我似乎错过了一个库,当我启动项目的输出时,我在启动时遇到异常。
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
答案 0 :(得分:19)
事实上,只有这些诊断功能的内置机制。
(1)在项目属性/ Debug中,确保'启用本机代码调试'检查:
(2)提升show-loader-snaps标志 - 它是IFEO中的注册表项,可以通过' GlobalFlags' GUI:
(3)运行应用程序并检查(非常)详细输出窗格。你可以大多跳到最后或寻找错误'。
更多详情here。
答案 1 :(得分:8)
你在做任何dllimport吗? - 这看起来像是一个未找到非托管dll的问题?
首先要确保您正在调用的任何非托管dll或exe(通过dllimport)部署到与您正在构建的.Net exe相同的文件夹中
如果调用程序集的源代码不可用,您可以尝试在该程序集上使用reflector来搜索dllimport语句
除此之外,您可能希望启用fustion日志查看器来跟踪程序集加载问题 - 有关详细信息,请参阅此blog post和msdn page
答案 2 :(得分:4)
为AppDomain.AssemblyResolve事件实现处理程序。它通过ResolveEventArgs.Name告诉您正在查找哪个程序集。如果这只是对此特定程序集进行故障排除的工作,请使用Fuslogvw.exe。如果挂起是非托管程序集,那么DependencyWalker的Profile选项可以显示LoadLibrary()调用失败的内容。 SysInternals的ProcMon也会起作用,但噪音很大。
答案 3 :(得分:0)
在某些情况下,使用COM时,您可能只需要注销RegAsm.exe并重新注册dll。 这就是上周为我解决此问题的原因,事情变得不同步。