InvalidProgramException / Common Language Runtime检测到无效程序

时间:2014-05-09 11:19:44

标签: c# .net exception dll

这是我在很长一段时间内看到的最奇怪的编程问题。

我正在使用Microsoft Visual C# 2010 ExpressC#.NET 2.0来开发应用程序。此应用程序引用了几个dll /程序集(这些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;
        }
    }
}

然后,此应用程序从dll生成Visual C# 2010 Express并在其他地方使用,一切正常。当我将另一个案例添加到上面的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无关 - 类)

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

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

17 个答案:

答案 0 :(得分:16)

只是想补充一下我的经验... 就我而言,我将C#Web API托管在Azure上,并且在尝试登录我的API时遇到此消息。 我必须进入我的Azure管理门户(portal.azure.com),转到App Services,选择我的Web API程序,然后从“概述”屏幕中单击“重新启动”。 此后,该程序再次正常运行。 在我的日志中找不到其他线索。

答案 1 :(得分:7)

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

答案 2 :(得分:6)

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

答案 3 :(得分:5)

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

答案 4 :(得分:2)

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

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

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

答案 5 :(得分:1)

在使用MSDeploy部署到Azure WebApp之后,我偶尔遇到此错误。重新部署后,该错误始终消失。

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

可能是MSDeploy中的错误,也可能是Azure中用于WebApp的IIS版本中的错误...

答案 6 :(得分:1)

如果您的问题与部署到azure应用程序的Web API dotnetcore 有关,则可能是由应用程序洞察力引起的。在刀片级设置应用程序见解应该可以解决该问题。还请注意,在刀片服务器级别将其设置为recommendedbasic似乎还没有解决。基本就是有效的价值。

  

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

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

答案 7 :(得分:1)

我通过以下操作解决了此问题:

  • 将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 \ Performance 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
  • 重建解决方案

答案 8 :(得分:1)

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

答案 9 :(得分:0)

-uncheck"代码优化" (包括参考的d​​ll) - 升级到.net framework 4.6

答案 10 :(得分:0)

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

enter image description here

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

enter image description here

答案 11 :(得分:0)

我们从头开始获得[\w\W]

将已编译的网站复制到其他环境-运行正常。 复制到其他服务器上-正常工作。

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

  

我希望位数不匹配会导致   BadImageFormatException而不是InvalidProgramException   问题中描述的内容。

我不熟悉XXX webservice Exception , System.InvalidProgramException: Common Language Runtime detected an invalid program.异常,但是我熟悉InvalidProgramException,其症状与我遇到BadImageFormatException问题时的症状非常相似。我不能说100%为什么会发生两种异常,当前运行的理论是它在64位计算机上运行的32位应用程序,但是我们无法证明它,也无法永久修复它。在应用程序池上启用32位应用程序不能解决该问题。

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

在我的情况下,正是Hasp保护(谷歌:Hasp哨兵保护密钥)软件破坏了dll。

答案 16 :(得分:0)

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

相关问题