【问题标题】:InvalidProgramException / Common Language Runtime detected an invalid programInvalidProgramException / 公共语言运行时检测到无效程序
【发布时间】:2014-05-09 11:19:44
【问题描述】:

这是我很长时间以来看到的最奇怪的编程问题。

我正在使用Microsoft Visual C# 2010 ExpressC#.NET 2.0 来开发应用程序。这个应用程序引用了几个dll/assemblies(这些dll都是在我的机器上生成的)。

下面是部分代码(都是基本的东西):

public class PowerManagement
{

    [TestCase]
    public void PrepareTest(){
        // Configure according to pre-conditions
        Preconditions precondition = new Preconditions();
        precondition.SetupPreconditions();
            ...
    }

    [TestCase]
    public void PerformTest(){
        TestcaseData testcaseData = new TestcaseData();

        // Set Trigger and perform check
        switch (testcaseData.triggerNumber){
            case (1):
                if ((new Trigger1(testcaseData)).Validate() != 1)
                    Report.TestStepFail("failed");
                break;
            ...
            case (4):
                if ((new Trigger4(testcaseData)).Validate() != 1)
                    Report.TestStepFail("failed");
                break;
            default:
                Report.TestStepFail("Not yet implemented");
                break;
        }
    }
}

这个应用程序然后从Visual C# 2010 Express 生成一个dll 并在其他地方使用,一切都很好。当我在上面的 switch 语句中添加另一个案例时,问题就出现了(见下文)

        ...
        case (4):
            if ((new Trigger4(testcaseData)).Validate() != 1)
                Report.TestStepFail("failed");
            break;
        case (5):
            if ((new Trigger5(testcaseData)).Validate() != 1)
                Report.TestStepFail("failed");
            break;
        default:
            Report.TestStepFail("Not yet implemented");
            break;

我仍然可以毫无问题地构建并生成 dll,但是当我使用生成的 dll 时,我收到以下错误:

A .NET exception (InvalidProgramException) occured in the module PowerManagement
Error message: Common Language Runtime detected an invalid program.
Throwing method: PowerManagement.PerformTest

(即使我复制case(4)并将其粘贴为新案例也会出现问题,因此它与Trigger5-class无关)

这里发生了什么?我查看了 Stackoverflow 中的其他 InvalidProgramExceptionCommon Language Runtime,但似乎没有一个相关。

我知道这个问题很奇怪所以请告诉我,我会提供更多信息。我使用的是 64 位 Windows 8 机器,如果这很重要的话。我已经检查了 VS 和 .NET 更新的任何更新。我还没有重新生成所有的 dll 几次,还从头开始创建了几次解决方案。

【问题讨论】:

  • 首先清理所有的 pdb。您可以尝试通过解决方案节点上 VS 解决方案资源管理器的上下文菜单中的“清洁解决方案”选项来执行此操作。不过,我会手动查找并删除所有 pdb。其次清理所有 pdb 下载缓存。第三次检查程序集本地副本,即全部删除它们并让它们在重建时刷新。重建所有程序集并尝试一下。

标签: c# .net exception dll


【解决方案1】:

只是想添加我的经验... 就我而言,我在 Azure 上托管我的 C# Web API,并且在尝试登录我的 API 时遇到了此消息。 我必须进入我的 Azure 管理门户 (portal.azure.com),进入应用服务,选择我的 Web API 程序,然后从概览屏幕单击重新启动。 此后,该程序再次正常运行。 在我的日志中没有找到任何进一步的线索。

【讨论】:

  • 有同样的故事。 MVC 将应用程序放在一个页面上。更改日志记录设置(导致重新启动)有助于解决此问题。 O_o
  • 重启对我不起作用,但重新部署相同的技巧确实有效。我发现 Azure 中的重启 webApp 非常不可靠。
  • 同样的故事。重启就解决了。
  • Restart 也为我做了这件事......不确定 Azure 发生了什么,但重新启动修复了它并阻止了我进行长时间的 Goose 追逐。荣誉
【解决方案2】:

尝试在您的应用程序池advanced settings 中启用 32 位应用程序。

【讨论】:

  • 我预计位不匹配会导致BadImageFormatException 而不是问题中描述的InvalidProgramException
  • 谢谢!我正在使用带有 .net 4.5.1 的 ASP.NET MVC 应用程序,但它引用了一个 .net 2.0 dll。启用 32 位应用程序解决了这个问题。
【解决方案3】:

我终于设法解决了这个问题。 我在 C# Express 中取消选中 code optimization 并解决了问题。仍然是最奇怪的事情,但由于我们使用的是旧工具和框架,我们不能真正责怪任何人。

【讨论】:

  • 我遇到了同样的问题,禁用代码优化为我解决了这个问题。这是针对 .NET Framework 4.7.2 编译的 F# 项目。
【解决方案4】:

我在升级到 Visual Studio 2017 v15.8.6 后遇到了这个问题。当我删除web.config 的编译标记中的assemblyPostProcessorType 属性时,问题就消失了。

【讨论】:

  • 在 VS 2017 中调试旧代码时会自动添加此标签。这导致了这个问题。谢谢@Brad Hurley
  • 同样的问题 - 更新了 Visual Studio,并开始出现此错误。删除 assemblyPostProcessorType 就可以了。谢谢。
【解决方案5】:

根据MSDN:“通常这表明生成程序的编译器中存在错误。”

我首先要确保您已在 Windows、.NET 和 Visual Studio 上安装了所有更新。

您还应该查看 Microsoft 支持上的 Q312544

【讨论】:

【解决方案6】:

在使用 MSDeploy 部署到 Azure WebApp 后,我偶尔会遇到此错误。第二次重新部署后,错误总是消失。

我们的构建和部署是两个不同的步骤,重新部署每次都发送完全相同的文件 - 这表明该问题并非唯一的编译器问题,正如本问题回复中其他地方所建议的那样。

可能是 MSDeploy 或 Azure 中用于 WebApps 的 IIS 版本中的错误...

【讨论】:

    【解决方案7】:

    此类问题可能是由编译后操作程序集 IL 的工具中的错误引起的,例如,如果您使用 Fody 及其插件。至少在 Fody MethodDecorator 中有一个错误会导致这种效果,请参阅 https://github.com/Fody/MethodDecorator/issues/8

    【讨论】:

      【解决方案8】:

      如果您遇到特定于 Azure Web 应用程序的问题 - 检查已安装的扩展程序 Microsoft.ApplicationInsights.AzureWebSites - 或者它的友好名称 Application Insights extension for Azure App Serviceremove it via kudu

      我们发现此扩展可能会干扰 msdeploy 推送 - 在 IIS w3wp.exe 进程下运行一个进程 snapshotholder_x64.exe。有人可能通过 azure 门户启用了此扩展程序。

      【讨论】:

      • 任何解决方案来保持 AppInsight 处于启用状态并且不触发“System.InvalidProgramException:公共语言运行时检测到无效程序。”
      • 我们仍然使用 App Insights,只是不使用 kudu 市场扩展。
      【解决方案9】:

      如果您的问题与部署到 azure 应用的 Web api dotnetcore 有关,那么这可能是由应用程序洞察引起的。在刀片级别设置应用程序洞察力应该可以解决问题。另请注意,在刀片级别将其设置为recommended 设置与basic 似乎存在未解决的问题。 Basic 是有效的值。

      在 Azure 上将 Web Api 部署为 API 应用时遇到此问题。对任何端点的初始请求都会产生预期的响应;但是,后续请求将返回相同的公共语言运行时错误。当我在我的 Web 应用程序的 Application Insights 刀片上启用推荐的集合级别时,我发现问题开始了。我设置了推荐并启用了所有单选按钮。还原此更改停止了错误。作为参考,我正在运行的 API 正在运行 Microsoft.ApplicationInsights 2.8.1

      供参考: https://github.com/dotnet/coreclr/issues/18323

      【讨论】:

        【解决方案10】:

        我通过执行以下操作解决了这个问题:

        • 将 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.exe 重命名为 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools \性能工具\vsinstr.exe.broken
        • 将 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.legacy.exe 重命名为 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\团队工具\性能工具\vsinstr.exe
        • 重建解决方案

        【讨论】:

        【解决方案11】:

        当我开始收到此错误时,我正在使用 .net core 3.0 在控制台应用程序中执行一些 powershell 自动化。我猜 .net 核心与 System.Management.Automation 不兼容,所以我将其更改为 .net framework 4.7,之后一切正常

        【讨论】:

          【解决方案12】:

          -取消选中“代码优化”(包括引用的 dll) - 升级到 .net 框架 4.6

          【讨论】:

          • 能否详细说明如何为什么这解决了OPs问题?
          【解决方案13】:

          我们突然开始收到XXX webservice Exception , System.InvalidProgramException: Common Language Runtime detected an invalid program.

          将编译后的网站复制到不同的环境 - 工作正常。 复制到不同的服务器 - 工作正常。

          我注意到此异常是在服务器重置时开始的(重新启动或应用程序池重置)。在研究这个问题时,我注意到 Brian Reichle 在 2016 年 6 月 6 日 12:33 发表的评论

          我预计位数不匹配会导致 BadImageFormatException 而不是 InvalidProgramException 问题中描述。

          我不熟悉 InvalidProgramException 异常,但我熟悉 BadImageFormatException 并且症状与我遇到的 BadImageFormatException 问题非常相似。我不能说 100% 为什么会发生任何异常,目前的运行理论是它是在 64 位机器上运行的 32 位应用程序,但我们无法证明它也无法永久修复它。在应用程序池上启用 32 位应用程序并不能解决问题。

          我们知道的唯一解决方法(尽管是暂时的)就是简单地回收应用程序池。无需重新编译或任何东西。幸运的是,这种情况并不经常发生,可能一两个月一次。

          【讨论】:

            【解决方案14】:

            我自己也遇到了这个问题。即使 VS 为我创建了虚拟目录,它也将 vb 作为默认语言,但我有一个 C# 应用程序。更改此设置解决了它。

            【讨论】:

              【解决方案15】:

              这是我在 IIS 上托管时遇到的一个有趣的异常。在发现我在 IIS 上的 .NET Framework 版本与我的项目使用的 .NET Framework 版本不同后,我解决了这个问题。请注意,如果您碰巧有其他引用的项目/ddl,请确保您也更新了他们的 .NET Framework 版本。

              【讨论】:

                【解决方案16】:

                在我的情况下,破坏 dll 的是 Hasp 保护(google: hasp sentinel protection key)软件。

                【讨论】:

                  【解决方案17】:

                  分享我的经验:在 x86 计算机上使用我的 WindowsForms 应用程序时遇到了同样的问题,发现我忘记复制所有 dll 重定向的 .exe.config 文件,之后一切都像魅力一样。

                  【讨论】:

                    猜你喜欢
                    • 2011-05-05
                    • 2018-02-17
                    • 1970-01-01
                    • 2017-05-05
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-02-08
                    • 2022-01-25
                    相关资源
                    最近更新 更多