【问题标题】:"LoaderLock was detected" with Visual Studio 2012使用 Visual Studio 2012 检测到“LoaderLock”
【发布时间】:2012-10-05 16:43:07
【问题描述】:

我有几个使用 SQL CE 4.0 和实体框架的 MVC 项目。自从迁移到 Visual Studio 2012 后,我不断收到以下错误(不是每次,但经常出现)

检测到LoaderLock

尝试在 OS Loader 锁内进行托管执行。不要尝试在 DllMain 或图像初始化函数中运行托管代码,因为这样做会导致应用程序挂起。

如果我重新使用 VS 2010,则不会发生错误,这让我相当确定这是 Visual Studio 的问题,而不是我的代码,但我希望有人为我确认!

编辑

问题似乎总是在调用 dbcontext 的 Dispose() 方法时出现。这是异常助手的截图:

【问题讨论】:

  • 或者,VS2012 在不安全结构方面比 VS2010 更加小心。
  • 没有调用堆栈来帮助你。一般来说,LoaderLock 往往会产生错误的警告。您可以使用 Debug + Exceptions、MDA、LoaderLock 复选框将其关闭。
  • @Hans,似乎没有调用堆栈(我在帖子中添加了异常助手的屏幕截图)。我认为问题出在非托管代码中。
  • 使用 SQL CE 4.0 和实体框架的 MVC 项目的 Microsoft Visual Studio Express 2013 for Web 也会发生这种情况。我一直在继续(F5)并且该应用程序仍然有效。我还没有找到在 Express 中关闭消息的选项。

标签: visual-studio-2012


【解决方案1】:

switch this off。由于它警告应用程序可能会挂起,如果您的程序没有挂起,那么您可能没问题。

同样的方法可以解决这个问题,关闭 MDA:

调试 -> 异常 -> 托管调试助手

并取消选中 LoaderLock 项。

【讨论】:

    【解决方案2】:

    当我在 C# 应用程序中使用一些外部 dll 时,LoaderLock 也有问题。

    • 对于 .NET 3.5,我只需取消选中 Exceptions menu 中的 Thrown option (Loader lock error)
    • 对于 .NET 4.0,我在 app.config 中添加了 <startup useLegacyV2RuntimeActivationPolicy="true">

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 2017-03-14
    • 2012-10-19
    • 2012-08-25
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多