无效程序异常 / 公共语言运行时检测到一个无效程序

33

这是我很长一段时间以来见过的最奇怪的编程问题。

我正在使用 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;
        }
    }
}

这个应用程序随后从Visual C# 2010 Express生成为dll,在其他地方使用一切正常。 当我在上面的 switch 语句中添加另一个 case 时(请参见下文),问题就会出现。

        ...
        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)复制并粘贴为新的Case,问题仍然存在,因此与Trigger5-class无关)

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

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


首先清理所有的pdb文件。您可以尝试通过VS解决方案资源管理器上的解决方案节点上下文菜单中的“清理解决方案”选项来完成此操作。不过我建议手动查找并删除所有pdb文件。其次,清理所有pdb下载缓存。第三步是检查程序集本地副本,即将它们全部删除并在重建时进行刷新。重新构建所有程序集并尝试运行。 - Zverev Evgeniy
可能是公共语言运行时检测到无效程序?的重复问题。 - Michael Freidgeim
18个回答

36

我想分享一下我的经验...在我的情况下,我将C# Web API托管在Azure上,当尝试登录API时遇到了这个消息。我不得不进入我的Azure管理门户(portal.azure.com),进入应用程序服务,选择我的Web API程序并从概述屏幕中点击“重启”。之后,程序再次正常工作。我的日志中没有发现更多线索。


2
有同样的经历。MVC 在一个页面上导致应用程序崩溃。更改日志记录设置(导致重新启动)有助于解决此问题。O_o - Alex Sorokoletov
1
重启对我没有起作用,但重新部署相同的工件确实有效。我发现在Azure中重启Web应用程序非常不可靠。 - TheLogicMan
2
同样的故事。重新启动解决了它。 - eddyP23
1
重启对我也起作用了...不确定Azure发生了什么事,但是重启解决了问题,防止我陷入漫长的鹅追踪。致敬。 - Clarence
我也是...只是重新启动了应用程序服务,一切恢复正常了!真是匪夷所思... - Leniel Maccaferri

8

我终于成功解决了这个问题。 我在C# Express中取消了代码优化选项,这样问题就解决了。虽然这是最奇怪的事情,但由于我们使用的是旧工具和框架,我们真的无法责怪任何人。


我曾经遇到过同样的问题,禁用代码优化后问题得以解决。这是在一个编译为.NET Framework 4.7.2的F#项目上发生的。 - torbonde

8

2
我认为位数不匹配应该导致BadImageFormatException而不是问题描述中的InvalidProgramException - Brian Reichle
谢谢!我正在使用带有.NET 4.5.1的ASP.NET MVC应用程序,但它引用了一个.NET 2.0的dll。启用32位应用程序解决了这个问题。 - user1271080

7

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


使用VS 2017调试旧代码时,会自动添加此标记。这是导致问题的原因。感谢@Brad Hurley。 - Akshay Anand
1
我也遇到了相同的问题 - 更新了 Visual Studio,然后开始出现此错误。删除 assemblyPostProcessorType 就解决了问题。谢谢。 - Gavin Coates

6
根据MSDN的说法:“通常这表示编译程序中存在错误。” 我建议首先确保您的Windows、.NET和Visual Studio已安装所有更新。您还应该查看Microsoft Support上的Q312544

嗨,谢谢回复,但我已经更新了几乎所有东西。 - theAlse
1
这应该是被接受的答案。楼主,你读了链接的文章吗? - nilsK
2
链接的文章无法访问。 - gusmally supports Monica
@gusmally 在这种情况下可以使用Web Archive... https://web.archive.org/web/20150226175524/http://support.microsoft.com/kb/312544 - yoel halb

5

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

我们的构建和部署是两个不同的步骤,因此每次重新部署都会发送完全相同的文件-这表明问题不仅仅是编译器问题,正如本问题的其他回答所建议的那样。

可能是MSDeploy中的一个错误,或者是Azure WebApps中使用的IIS版本的问题...


4

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


2
如果您遇到此问题,特别是针对 Azure Web Apps 的情况,请检查是否安装了扩展程序Microsoft.ApplicationInsights.AzureWebSites - 或其友好名称 Azure App Service 的 Application Insights 扩展 并通过 kudu 将其删除

enter image description here

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

enter image description here


有没有解决方案可以保持AppInsight启用,而不会出现“System.InvalidProgramException:Common Language Runtime检测到无效程序”的问题? - Jaroslaw Stadnicki
1
我们仍然使用应用程序洞察,只是不再使用Kudu市场扩展。 - SliverNinja - MSFT

2
如果您的问题涉及部署在 Azure 应用程序上的 Web API dotnetcore,那么这可能是由于应用程序洞察引起的。在刀片级别设置应用程序洞察应该可以解决问题。还要注意,在刀片级别设置为推荐设置与基本设置存在未解决的问题。基本设置是有效的值。

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

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


2

我在使用 .NET Core 3.0 编写控制台应用程序时,进行 PowerShell 自动化操作时出现了错误。我猜测是因为 .NET Core 与 System.Management.Automation 不兼容,所以我改用了 .NET Framework 4.7,之后一切正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接