【问题标题】:A procedure imported by {myassembly} could not be loaded无法加载由 {myassembly} 导入的过程
【发布时间】:2020-08-13 04:14:01
【问题描述】:

在运行程序时,我似乎缺少一个库,当我启动项目的输出时,我在启动时遇到异常。

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    

【问题讨论】:

  • 德语翻译为“Eine von {myassembly} importierte Prozedur konnte nicht geladen werden.”,以防有人在谷歌上搜索(就像我一样)。跨度>

标签: c# debugging assemblies


【解决方案1】:

事实上,这些诊断有一个内置机制。

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

(2) 提高 show-loader-snaps 标志 - 它是 IFEO 中的注册表项,可通过“GlobalFlags”GUI 访问:

(3) 从调试器运行应用程序 - 或在加载错误之前附加。检查 (very) 详细输出窗格。您通常可以跳到最后或查找“错误”。

更多详情here

【讨论】:

  • 我希望我能 +10 这个
  • 我们有两个开发人员在拼命解决一个问题,这直接为我们指明了答案。谢谢!
  • 我只是想补充一点,只有在使用 windbg 附加到进程时才能发现该错误。
  • App 需要在调试器(例如 Visual Studio、windbg 或 cdb)下运行才能看到调试输出。
  • 在Image字段中,只应输入exe文件名,而不是完整路径。只是为了帮助其他因此而陷入困境的人。
【解决方案2】:

你在做任何 dllimport 吗? - 这似乎是一个未找到非托管 dll 的问题?

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

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

除此之外,您可能希望启用融合日志查看器来跟踪程序集负载问题 - 请参阅 blog postmsdn page 了解更多详细信息

【讨论】:

  • 很遗憾,我无法访问此 DLL 的源代码。如果有任何方法可以确定哪些程序集未能加载,那将有很大帮助。
  • 谢谢理查德,这两个链接非常有帮助。
【解决方案3】:

为 AppDomain.AssemblyResolve 事件实现一个处理程序。它通过 ResolveEventArgs.Name 告诉您它正在寻找哪个程序集。如果这只是解决此特定程序集的问题,请使用 Fuslogvw.exe。如果挂断是非托管程序集,则 DependencyWalker 的 Profile 选项可以向您显示 LoadLibrary() 调用失败的原因。 SysInternals 的 ProcMon 也可以,但噪音更大。

【讨论】:

  • 谢谢你的回复,我选择了Richard的回复,因为我只是看了他的帖子,并设法使用了融合日志。
【解决方案4】:

在某些情况下,使用 COM 时,您可能只需要使用 RegAsm.exe 取消注册并重新注册 dll。 这就是上周为我解决了这个问题的原因,事情已经不同步了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2016-02-26
    • 2013-04-04
    • 2023-04-11
    • 2016-07-28
    相关资源
    最近更新 更多